使用 vim-fzf 忽略 node_modules

Ignore node_modules with vim-fzf

我已经定义了一个函数来搜索文件名 (<C-P>) 和 git 根目录中的字符串 (<C-F>) 与 fzf.vim 插件异步搜索 (我还安装了 Ag)。但是,我无法操纵定义来忽略 node_modules 目录。 vim 脚本太难调试,没有控制台打印任何东西。

有没有 vim 脚本方面的专家可以帮我解决这个问题。非常感谢

let s:git_path = substitute(system("git rev-parse --show-toplevel 2>/dev/null"), '\n', '', '')

function! s:ag_git_root(query, ...)
  if type(a:query) != type('')
    return s:warn('Invalid query argument')
  endif
  let query = empty(a:query) ? '^(?=.)' : a:query
  let args = copy(a:000)
  let ag_opts = len(args) > 1 && type(args[0]) == s:TYPE.string ? remove(args, 0) : ''
  let command = ag_opts . ' ' . fzf#shellescape(query) . ' ' . s:git_path
  return call('fzf#vim#ag_raw', insert(args, command, 0))
endfunction

command! -bang -nargs=* A
      \ call s:ag_git_root(<q-args>, <bang>0)
command! -bang -nargs=? F
      \ call fzf#vim#files(s:git_path, <bang>0)
silent! nmap <C-P> :F<CR>
silent! nmap <C-F> :A<CR>

最后,我想出了一个解决方法,将 fzf#vim#files 替换为 :Gfiles

新配置为silent! nmap <C-P> :GFiles<CR>

<C-F>映射与问题中的保持一致。

:GFiles 解决方案的缺点是未添加到 git 的文件(未跟踪的文件)不包含在搜索结果中。它们都可以通过 git add . -A

添加

此解决方案的优点是 .gitignore 中的所有文件在搜索结果中都被忽略