我写了以下单行命令。
command! -nargs=? Gfind execute "split | enew | cd `git-pwd` | read !git ls-files | grep " . expand("<args>") . " " <bar>
(
git-pwd
返回当前获取回购的根或&#39; ./'
#!/bin/bash
git-pwd() {
local root=$(git rev-parse --show-cdup 2>&1 )
[[ "$root" == "" ]] && { echo "./" && return; }
[[ "$root" == fatal:* ]] { echo "./" && return 1; }
echo "$root"
}
[[ "$BASH_SOURCE" == "$0" ]] && git-pwd "$@"
)
它允许我执行:Gfind regex
,并打开一个拆分窗口,其中包含路径/名称与正则表达式匹配的文件列表。我可以使用gf
进行导航。
我想知道是否有一种简单的方法可以让该窗口中的返回文件像cwindow
或NERDTree
一样可以输入。
答案 0 :(得分:3)
:Gedit
与完成缩写路径一起使用。例如:Gedit f/b/b<tab>
将扩展为:Gedit foo/bar/baz
(需要fugitive.vim):Gedit
的Glob。例如:Gedit **/baz<tab>
有些低技术解决方案使用:find
和'path'
:
set path=.,**
nnoremap <leader>f :find *
这些不是互斥的,因为你可以使用所有这些方法,因为每个方法都有自己的专业和骗局。我个人使用projectionist.vim作为我的主要导航方法。
我认为最好的方法是使用QuickFix列表。您的命令会使用与您的模式匹配的文件填充quickfix列表,然后您可以使用:copen
实际查看文件并在它们之间移动或使用:cnext
/ :cprev
类型命令在文件。
将以下内容放入~/.vimrc
文件中:
command! -nargs=? Gfind call s:gfind(<q-args>)
function! s:gfind(pat)
let grepprg = &grepprg
let errorformat = &errorformat
let &grepprg = 'cd ' . shellescape(fugitive#repo().dir()) . ' && git ls-files | grep '
let &errorformat = '%f'
execute 'grep ' . a:pat
cwindow
let &grepprg = grepprg
let &errorformat = errorformat
endfunction
注意:我没有测试过这段代码。它也使用了fugitive.vim,但如果您愿意,可以使用git-cwd
技巧。您可能希望删除cwindow
命令,具体取决于您的工作流程。