在 Vim 中,文件名的制表符补全不起作用
Posted
技术标签:
【中文标题】在 Vim 中,文件名的制表符补全不起作用【英文标题】:In Vim tab-completion of file names doesn't work 【发布时间】:2014-11-27 01:42:21 【问题描述】:当我尝试在 Vim (Linux) 中打开一个文件进行编辑时,当我按下 TAB 时,Vim 仅使用当前目录中的文件名自动完成文件名。但是,在网上搜索后,我认为从版本 7 开始,Vim 应该支持使用搜索路径中所有目录中的文件名的类似 bash 的文件名自动补全。
比如说,dir1
目录中有一个文件file1
(该目录也在环境变量 PATH 中)。
我在 Vim 中键入以下命令:
set path=/dir1
set wildmode=list:longest
然后,当我输入:
:e fil<TAB>
文件名没有自动完成。如何在 Vim 中启用此功能?
【问题讨论】:
【参考方案1】:制表符完成工作。你只是期望它做一些实际上不应该做的事情。
:e[dit]
和它的兄弟姐妹(:sp[lit]
、:vs[plit]
、:tabe[dit]
)根本不要使用path
选项,不管你有什么版本的 Vim。
改用:fin[d] fil<Tab>
(和:sf[ind]
、:vert sf[ind]
、:tabf[ind]
)。
使用set path=/dir1/**
使:find
递归。
请参阅 :help 'path'
和 :help :find
。
编辑
从项目的根目录启动 Vim 通常被认为是“好习惯”:
$ cd /path/to/project
$ vim somefile
主要优点是它将 Vim 的“当前目录”设置为可用值,使您可以相对轻松地浏览项目或以干净直观的方式在项目中使用外部程序。
顺便说一下,我只使用:find
(及其兄弟姐妹)进行文件导航,我有一些技巧要分享:
" sets 'path' to:
" - the directory of the current file
" - every subdirectory of the "current directory"
set path=.,**
" enables the wildmenu
set wildmenu
" ignore specific directories and files
set wildignore+=*.min.*
" case-insensitive search
set wildignorecase
【讨论】:
我喜欢在编辑时将每个文件的目录添加到我的路径中,将其添加到路径的开头以便更快地搜索相关文件。我对标签文件做同样的事情;我以为我创建了一个关于它的 wiki 页面,但我现在找不到它。 @Ben,如果你没有找到那个 wiki 页面,你能详细说明一下你的工作流程吗? 显然我从来没有把它变成一个真正的页面:vim.wikia.com/wiki/User:Fritzophrenic/Fast_find 在每次 BufRead 上,我都会从路径中删除默认路径,从路径中删除当前文件的路径,添加默认路径,然后预先添加当前文件的路径。因此,未来的搜索更喜欢与当前文件位于同一目录中的文件。出于类似的原因,我对标签文件做同样的事情。以上是关于在 Vim 中,文件名的制表符补全不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Vim 的 Python Omnicompletion 不起作用