在插入模式下使用 vim 文件名完成遍历目录 (Ctrl-X Ctrl-F)
Posted
技术标签:
【中文标题】在插入模式下使用 vim 文件名完成遍历目录 (Ctrl-X Ctrl-F)【英文标题】:Traversing directories with vim file name completion in insert mode (Ctrl-X Ctrl-F) 【发布时间】:2012-10-30 21:46:01 【问题描述】:我正在尝试使用 vim 的 compl-filename
功能 (Ctrl-XCtrl-F) 在 INSERT
模式下完成路径,但我不能找出如何在不(暂时)结束完成模式的情况下遍历目录:
假设我要完成路径/etc/sysconfig/network-scripts/ifup
。
我希望能够做类似的事情:
/eCtrl-XCtrl-F /etc/ /etc/sysCtrl-F /etc/sys配置/ /etc/sysconfig/netCtrl-F /etc/sysconfig/net控制台Ctrl-N /etc/sysconfig/networkCtrl-N /etc/sysconfig/net工作脚本/ /etc/sysconfig/network-scripts/ifupCtrl-Y /etc/sysconfig/network-scripts/ifup问题是,一旦我在路径匹配(如/etc/
)后开始输入*,它就会结束文件名完成。我希望它保留在文件名完成中,以便我仍然可以使用 Ctrl-F、Ctrl-N 等。由于它结束完成,我必须输入再次Ctrl-XCtrl-F重新启动它,同时有用的完成弹出菜单消失。
我可以设置一个选项来改变它吗?
* 这里的“输入”是指'isfname'
中的字符——当然,输入其他字符(如空格或标点符号)不应继续完成文件名。
【问题讨论】:
【参考方案1】:简单的重映射将是
inoremap / /<C-x><C-f>
因此,当您在插入模式下键入斜杠(/)时,您将获得自动完成弹出窗口 :)
将它放在您的 .vimrc 文件(对于 vim)或 init.vim(对于 neovim)中
【讨论】:
【参考方案2】:在使用cntr+x+f之前请先插入“i”。我也有类似的情况。 :)
【讨论】:
【参考方案3】:Vim 不做自动-完成。
为此,您需要一个专用插件,例如 AutoComplPop 或 NeoComplCache
【讨论】:
【参考方案4】:我不确定你在说什么,但你可以在目录中再次按 Ctrl-XCtrl-F完成菜单以展开它。您不必先关闭菜单。我只是按住Ctrl并点击xf
遍历目录,n
和p
上下移动,w
返回。
如果您不使用:h i_CTRL-F
,那么您可以重新映射它。例如,
inoremap <C-f> <C-x><C-f>
【讨论】:
如果我在完成路径的一部分后立即键入^XF
(以/
结尾),我可能需要滚动许多路径才能找到我想要的路径,但无法找到通过键入额外的字符来限制选项。 ^XFP
至少可以让我输入额外的字符,但它很笨重,而且没有必要。
@codebeard 你永远不需要输入^XFP
。如果您开始输入/et
,那么您可以点击^XF
。然后键入X^XF
(例如)以获取/etc/X11/
。您可以在菜单中开始输入,而无需使用^P
。我很可能在这里有偏见,但我真的可以想象一个更好的方法来做到这一点。如果你想让它表现得像 bash 完成,你可以inoremap <Tab> <C-x><C-f>
。
除了我在这里输入'X'时,我失去了弹出菜单,这可能是首先使用文件名完成的目标——我很少用它来节省输入(我可以在更短的时间内键入一个 30 个字符的路径名,而不是弄乱组合键),但是当我不记得我在寻找什么路径时,我会使用它。此外,考虑到<Tab>
键在编辑大多数文件中的重要性,inoremap <Tab> ...
可能是不明智的。
@codebeard 哎呀,我的意思是我无法想出更好的方法来做到这一点。可能有一个插件可以让你回到文件完成模式,直到你点击<Space>
来结束它。希望你能找到适合你的东西。以上是关于在插入模式下使用 vim 文件名完成遍历目录 (Ctrl-X Ctrl-F)的主要内容,如果未能解决你的问题,请参考以下文章
vim进入text.c文件里.在插入模式下,想查找单词word,怎么进行操作
为啥在vim中插入模式下按Backspace键,会输入^?,而不是向前删除呢?怎样更改设置?