如何防止Vim扩展‘~’;完工期间?

如何防止Vim扩展‘~’;完工期间?,vim,tab-completion,Vim,Tab Completion,我在使用Vim的MacBook上,为了简单起见,我打开了文件~/some_file.py,~/some_other_file.py,以及~/user.py。在macOS上,~扩展为/Users/ 因此,如果我在Vim命令行中键入:b user,然后点击tab展开,它将遍历每个文件,而不是直接进入~/user.py 有什么方法可以防止这种行为吗?我无法在linux下重现您的问题(tildes在我的vim的完成列表中没有解决,所以:b home在~/some_file.py之前给我~/home.py

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

因此,如果我在Vim命令行中键入
:b user
,然后点击tab展开,它将遍历每个文件,而不是直接进入
~/user.py


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

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


尝试键入
:b user
,然后完成Shift+Tab。在这种情况下,我的vim(7.2.442,如果有必要的话)将以最后一个匹配完成,这就是您想要的。

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

函数!自定义缓冲区完成(a、l、p)
让buf_出来=“”
redir=>buf_out
静默缓冲区
重拨端
让buf_list=map(split(buf_out,“\n”),“substitute(v:val)”。
\“^.*”\%(\~[/\]\)\?\([^“]\+\)”*$“\\1”,“g”))
返回联接(buf_列表“\n”)
端功能
命令!-nargs=1-完成=自定义,自定义缓冲区完成B
(请注意,它在返回之前会切断路径的
~/
部分。)
完成列表。)

您无法重现该问题,因为您可能在主目录中的Vim中打开了文件。请尝试以下操作:
cd/tmp;Vim~/some_file.py~/home.py
,您可能会遇到问题。至少在这种情况下我会遇到,因此问题中提到的行为已得到确认。@ib,您完全正确。仍然使用Shift+Tab完成是的,我同意在这种情况下,
Shift+Tab
是最好的生活黑客。