在插入模式下使用vim文件名补全(Ctrl-X Ctrl-F)遍历目录

8
我正在尝试使用vim的compl-filename功能(Ctrl-XCtrl-F)在INSERT模式下完成路径,但我无法弄清楚如何在不(临时)结束完成模式的情况下遍历目录:
假设我想完成路径/etc/sysconfig/network-scripts/ifup
我希望能够做类似以下的事情: /eCtrl-XCtrl-F /etc/ /etc/sysCtrl-F /etc/sysconfig/ /etc/sysconfig/netCtrl-F /etc/sysconfig/netconsoleCtrl-N /etc/sysconfig/networkCtrl-N /etc/sysconfig/network-scripts/ /etc/sysconfig/network-scripts/ifupCtrl-Y /etc/sysconfig/network-scripts/ifup 问题是,在路径匹配后开始键入字符(例如/etc/)后,它会立即结束文件名完成。我希望它仍然处于文件名完成状态,以便我仍然可以使用Ctrl-FCtrl-N等。由于它结束了完成,我必须再次键入Ctrl-XCtrl-F以重新启动它,并且在此期间有用的完成弹出菜单会消失。
是否有选项可以更改这个问题?
* 在这里“键入”指的是'isfname'中的字符--当然,键入其他字符(例如空格或标点符号)不应继续文件名完成。
4个回答

5
我不确定你的意思,但是当你在补全菜单中时,只需再按一次Ctrl-XCtrl-F,就可以展开目录,不需要先关闭菜单。我通常按住Ctrl并敲击xf来遍历目录,使用np上下移动,w返回上一级。
如果你不使用:h i_CTRL-F,那么你可以重新映射它。例如:
inoremap <C-f> <C-x><C-f>

如果我在完成路径的一部分(以“/”结尾)后立即键入“^XF”,我可能不得不滚动查找许多路径才能找到想要的路径,而不能通过键入额外字符来限制选项。“^XFP”至少让我能够键入额外字符,但很笨拙,而且不应该是必需的。 - codebeard
@codebeard 你永远不需要输入 ^XFP。 如果你开始输入 /et,然后按下 ^XF。 然后可以键入 X^XF (例如)以进入 /etc/X11/。在菜单中输入时,无需使用 ^P。我可能有偏见,但我确实可以想象一种更好的方法来完成它。如果您希望其行为类似于bash完成,可以将其映射为 inoremap <Tab> <C-x><C-f> - Conner
除了在此处键入“X”后,我将失去弹出式菜单之外,这可能是首次使用文件名完成的目标-我很少使用它来节省打字时间(我可以在比搞弄按键组合更短的时间内输入30个字符的路径名),但当我记不起要查找哪个路径时,我就会使用它。此外,“inoremap <Tab> ...”可能是不明智的,考虑到<tab>键对于编辑大多数文件的重要性。 - codebeard
@codebeard 哎呀,我是说我想不到更好的方法了。也许有一个插件可以让你重新进入文件完成模式,直到你按下 <Space> 来结束它。希望你能找到适合你的东西。 - Conner

2
简单的重新映射可以是:
inoremap / /<C-x><C-f>

当你在插入模式下输入斜线(/)时,将会出现自动补全的弹窗 :)

将其放置在 .vimrc 文件(针对 vim)或 init.vim 文件中(针对 neovim)


0
请在使用cntr+x+f之前先插入“i”。我曾经处于类似的情况。 :)

这里没用。你的意思是要进入插入模式吗? - Felix

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接