在Vim插入模式下,是否有一种添加文件路径自动补全的方法?

90

我经常写许多shell脚本,需要经常输入文件路径。我想知道有没有任何方法可以让Vim在插入模式下自动完成文件路径,就像当您在您喜爱的Shell中时,按Tab键即可完成目录或文件路径。

如果能够将Shell的CTRLD功能用于Vim插入模式(即查看当前路径中的文件/目录),则更加优秀。


有趣的问题,我也很想知道答案 :) - Jay Zeng
@stephenmm 在你的shell中,Ctrl-D是什么作用?在我的bash shell中,当我输入一些文本时它什么也不做,否则会关闭终端。 - alhelal
@alhelal - 看起来在我的某个旧的shell中,CTRL-D会显示文件和目录。我再也看不到任何CTRL-D功能了。 - stephenmm
5个回答

179

文件名omni补全,可以使用:

Ctrl-XCtrl-F


12
另一个关于 Vim 的惊喜时刻...谢谢。我不会在插入模式下使用 tab,所以将以下代码添加到我的 .vimrc 文件中:imap <Tab> <C-X><C-F> - stephenmm
5
在插入模式中,<Tab> 的另一个好用处是<c-n>。它可以根据你正在编辑的文件中的其他单词,自动完成你正在输入的单词。当我打变量或类名时,我经常使用它。 - Derek
有没有办法影响搜索路径?在C文件中添加#include条目时,路径可能与您打开文件的位置无关。 - Rob Bradford
@RobBradford 尝试使用 YouCompleteMe,如果提供正确的信息(例如我使用由 YCM-Generator 生成的 .ycm_extra_conf.py,它使用我的 cmake 构建系统),它会很好地自动完成包含文件夹中的任何路径名。 - Emile Vrijdags
当文件名中包含空格时,Vim自动补全功能会失效。有没有解决这个问题的方法? - Jean

21

按下 ctrl-x 之后再按下 ctrl-f

:he compl-filename


21

在@CMS和@michael的优秀回答基础上:

当使用ctrl+X ctrl+f命令序列时,它会显示当前目录中的文件列表。我花了一分钟的时间寻找在不同文件名之间上下移动的正确按键。正确的按键是Ctrl-n和Ctrl-p。您可以使用几乎任何其他按键(如Space)选择并继续输入。

此外,如果您还没有到达要插入的文件/目录,则可以按以下方式进入文件树结构:

  1. 可选地输入某个目录的一部分。 您甚至可以使用../../等!
  2. 按下ctrl+X ctrl+f并从列表中选择树中的第一个项目。
  3. 接下来,当正确的项目突出显示时,请再次按ctrl+f,以显示目录树结构下一个级别的列表。

您可以一直这样做,直到找到要在文档中插入的目录/文件。


7
第三步你是不是指的是ctrl+x和ctrl+f?因为只用ctrl+f在我的电脑上无效,它的功能与ctrl+n相同。顺便说一下,如果目录名中有空格,这里也无法工作 :/ 你知道有什么解决方法吗? - Rojo
请编辑此答案,由于第三步的不准确性(导致一些混淆)。请根据@Rojo上面的评论修改答案,因为它除此之外是有帮助的。 - Chris

0

我遇到了类似的问题。我找到了解决方案,如下:

    sudo apt-get install realpath

在VIM中,以正常模式输入以下内容来导航到文件:

    :r !realpath /path/to/file

当你在`!realpatch`之后进入非插入模式时,你可以使用我们的快捷键按钮。
瞧!TAB键又可以正常工作了!

0

编辑:抱歉,我通过谷歌搜索“vim插入文件绝对路径”来到这里。

(首先使用 esc 或 ctrl+c 离开插入模式);)

从正常模式开始,在空白行上:

!!readlink -f #

这将运行一个命令,并用当前文件名替换 #readlink 将解析出规范名称,!! 将在光标所在处写入输出。

请注意,这需在空白行上完成,因为该行内容将作为标准输入传递给子命令。


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