Vim插入模式文件路径完成

时间:2013-03-16 23:11:24

标签: vim autocomplete

我想更改vim查找文件完成的位置,但仅限于插入模式。例如:

我在CG-Website目录中打开gvim。

这是我的目录结构:

enter image description here

然后我进入css文件夹并打开style.css

enter image description here

使用:e src/static/css/style.css

现在我在style.css里面,我想完成一个目录下的文件名。

我希望能够在../模式下输入INSERT并显示静态文件夹内的所有文件/文件夹,而不是www文件夹。它现在做了什么。

但是我不想更改实际目录,因为我仍然希望:e能够正常工作。

2 个答案:

答案 0 :(得分:3)

插入模式文件名完成始终从“当前目录”或“工作目录”完成,该目录可能是也可能不是当前文件的目录。由于您不想更改目录,因此文件名完成无法像您希望的那样工作。

实际上,:h compl-filename的最后一句应该给你一个提示:

Search for the first file name that starts with the
same characters as before the cursor.  The matching
file name is inserted in front of the cursor.
Alphabetic characters and characters in 'isfname'
are used to decide which characters are included in
the file name.  Note: the 'path' option is not used
here (yet).

此问题的一个解决方案是set autochdir,以便Vim始终将工作目录更改为当前文件的目录,并使用类似CtrlP(还有其他)的插件进行导航。如果配置正确,CtrlP允许您从项目的主页导航文件,如.git或类似目录的存在所定义。这非常方便。

但是,您可以使用set autochdir相对轻松地绕过该限制(再次,您需要它来完成文件名,以便像您一样工作 - 而我 - 希望它能够正常工作)还有一点创造力:

nnoremap <F9> :e ~/path/to/project/

将此映射视为项目的快捷方式。

答案 1 :(得分:0)

我认为你正以错误的方式接近这一点。您希望在不更改当前目录的情况下过滤相对于上次打开的目录的结果,这是没有意义的。

我的建议是使用一个工具,它可以让您快速过滤项目根文件夹中的所有文件。

查看Command-T: Fast file navigation for VIM

PS:你需要vim支持红宝石。