Vim-make缓冲区中的行可以输入

时间:2015-02-04 17:43:34

标签: vim

我写了以下单行命令。

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进行导航。

我想知道是否有一种简单的方法可以让该窗口中的返回文件像cwindowNERDTree一样可以输入。

1 个答案:

答案 0 :(得分:3)

替代

  • :Gedit与完成缩写路径一起使用。例如:Gedit f/b/b<tab>将扩展为:Gedit foo/bar/baz(需要fugitive.vim
  • :Gedit的Glob。例如:Gedit **/baz<tab>
  • 使用像CtrlP.vim这样的模糊查找器来跳过你的项目。
  • 使用类似projectionist.vim的内容为结构良好的项目构建导航命令。

有些低技术解决方案使用: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命令,具体取决于您的工作流程。