Answers:
这是我的设置的相关部分:
启用wildmenu,
set wildmenu
使文件名完成跳过这些文件和目录,
set wildignore+=*.swp,*.bak
set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
set wildignore+=*/min/*
set wildignore+=tags,cscope.*
set wildignore+=*.tar.*
使其不区分大小写,
set wildignorecase
列出文件,然后让用户选择Wildmenu,
set wildmode=list:full
将当前文件的目录以及工作目录下的每个目录添加到Vim的目录中path
,
set path=.,**
警告!路径选项非常有用。上面的值- .,**
对我来说有效,但是我使用的语言没有标准库。在正确的价值完全取决于你的需求。
一堆:find
映射,大写变体从当前文件的目录开始搜索,以提高性能,
nnoremap ,f :find *
nnoremap ,F :find <C-R>=expand('%:p:h').'/**/*'<CR>
nnoremap ,s :sfind *
nnoremap ,S :sfind <C-R>=expand('%:p:h').'/**/*'<CR>
nnoremap ,v :vert sfind *
nnoremap ,V :vert sfind <C-R>=expand('%:p:h').'/**/*'<CR>
这是它的样子:
看到 :h :command-completion-custom
我们可以使最后一个示例适应仅完成git列出的文件。
command! -nargs=1 -bang -complete=customlist,GitFindComplete
\ GitFind edit<bang> <args>
function! GitFindComplete(ArgLead, CmdLine, CursorPos)
let search_pattern = "*" . a:ArgLead . "*"
let shell_cmd = "git ls-files " . shellescape(search_pattern)
return split(system(shell_cmd), "\n")
endfunction
现在,您可以使用自动完成功能来打开git列出的文件:
:GitFind ome_f<Tab>
请注意,在自定义完成功能中,我们要做的不只是简单列出可以完成的文件。我们还必须过滤相对于当前命令行参数的列表ArgLead
。在此示例中,我们要求git
通过传递包装在*
通配符中的参数来为我们进行过滤。