プロジェクトツリーの深い場所でファイルを見つけて開く効率的な方法は?


12

ctrlpおよびのようなプラグインNERDTreeがない場合、プロジェクトツリーの深い場所でファイルを見つけて開く最も効率的な方法は何でしょうか。

をに設定するpath**/*.gitやその他の隠しディレクトリに不要なファイルが作成されるため、問題外と思われます。

パスをスマートな方法で設定して、ファイルのみを含むようにする方法はありますgit ls-filesか?

回答:


24

ここに私のセットアップの関連する部分があります:

  • ワイルドメニューを有効にし、

    set wildmenu
    
  • filename-completionがこれらのファイルとディレクトリをスキップするようにします。

    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
    
  • ファイルを一覧表示し、ユーザーにワイルドメニューで選択させる

    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>
    

そして、これはどのように見えるかです:

:検索


1
うわー、これらはいくつかの素晴らしいマッピングと設定です。詳しい回答ありがとうございます。

3

見る :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*ワイルドカードで囲んだ引数を渡すことにより、フィルタリングを実行するように求めています。


これは素晴らしいトリックです

1

私のメソッドには次のシェル関数が含まれています~/.bash_profile

vimf() {
  vim $(find . -name $1)
}

次に、プロジェクトツリーの深い場所にあるファイルを開くには、次のように入力します。

vimf some_file.c
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.