【问题标题】:How do I prevent Vim from expanding ‘~’ during completion?如何防止 Vim 在完成期间扩展“~”?
【发布时间】:2020-08-06 05:11:51
【问题描述】:

我在使用 Vim 的 MacBook 上,为了简单起见,我打开了文件 ~/some_file.py~/some_other_file.py~/user.py。在 macOS 上,~ 扩展为 /Users/<username>

因此,如果我在 Vim 命令行中键入 :b user,然后按 Tab 键展开,它会遍历每个文件,而不是直接转到 ~/user.py

有什么办法可以防止这种行为吗?

【问题讨论】:

    标签: vim tab-completion


    【解决方案1】:

    我无法在 linux 下重现你的问题(波浪号在我的 vim 的完成列表中没有解决,所以:b home~/some_file.py 之前给了我~/home.py),但是...

    尝试输入:b user,然后使用 Shift+Tab 完成。在这种情况下,我的 vim(如果重要,则为 7.2.442)完成最后一场比赛,这就是你想要的。

    【讨论】:

    • 您无法重现该问题,因为您可能在 Vim 中打开主目录中的文件。试试这个:cd /tmp; vim ~/some_file.py ~/home.py,你可能会遇到问题。至少我在这种情况下是这样做的,所以问题中提到的行为得到了证实。
    • @ib,你说得对。不过,使用 Shift+Tab 完成仍然有效。
    • 是的,我同意Shift+Tab 在这种情况下是最好的生活黑客。
    【解决方案2】:

    无法更改 Vim 内置缓冲区完成。唯一的 我可以建议的事情(除了已经从家里打开这些文件 目录)是定义你自己的:b命令版本 期望的完成。可能是这样的:

    function! CustomBufferComplete(a, l, p)
        let buf_out = ''
        redir => buf_out
        silent buffers
        redir END
    
        let buf_list = map(split(buf_out, "\n"), 'substitute(v:val, ' .
        \   '''^.*"\%(\~[/\\]\)\?\([^"]\+\)".*$'', "\\1", "g")')
        return join(buf_list, "\n")
    endfunction
    
    command! -nargs=1 -complete=custom,CustomBufferComplete B b <args>
    

    (请注意,它会在返回之前切断路径的 ~/ 部分 完成列表。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多