CtrlST2 の+に最も近いもの (「正確」ではなく「最も近い」)は、get ready… CtrlPPというプラグインです。Command-TやFuzzyFinderなど、他にも同様のプラグインがあります。
私は CtrlP を使用しており、気に入っていますが、「プラグインを使わない」というあなたの決定を心から支持します。これは最も簡単な方法ではありませんが、長期的には報われるでしょう。
ファイルを開く
ファイルを開く最も基本的な方法は、:e /path/to/filename
. ありがたいことに、タブ補完とワイルドカードを取得できます。クラシックなものと、「任意のサブディレクトリ」を表す*
特別なものです。**
これらすべてを組み合わせると、次のことができます。
:e **/*foo<Tab>
foo
作業ディレクトリの下にある名前に含まれるすべてのファイルから選択するか、次のようにします。
:e **/*foo/*bar<Tab>
作業ディレクトリの下の任意の場所で、その名前にbar
含まれるサブディレクトリの下にある名前に含まれるすべてのファイルから選択します。foo
もちろん、それは:tabe[dit]
、:sp[lit]
、:vs[plit]
にも有効です。
ただし、これらのコマンドは 1 つのファイルに限定されます。:next
複数のファイルを開くために使用します。
:next **/*.js
を見てください:help arglist
。
バッファ間のジャンプ
:b[uffer]
基本的なバッファ切り替えコマンドです:
:b4 " switch to buffer number 4
:bn " switch to next buffer in the buffer list
:bp " switch to previous buffer in the buffer list
:bf " switch to first buffer in the buffer list
:bl " switch to last buffer in the buffer list
:b foo<Tab> " switch by buffer name with tab-completion
:b# " switch to the alternate file
これらのコマンドとそれに関連するコマンドの多くは、カウントを受け入れることに注意してください。
この:ls
コマンドは、ロードされたバッファーのリストを表示します。ただし、これは少し「特殊」です。バッファーには作成時に番号が割り当てられるため、1 2 5
バッファーを削除した場合のようなリストを作成できます。はい、これは少し扱いにくいです。そのため、番号でバッファに切り替えるのは少し面倒です。部分的な名前による切り替え、:b foo<Tab>
またはサイクリングを優先し:bn :bp
ます。
とにかく、ロードされたすべてのバッファを一覧表示し、バッファの番号を入力して を押すのを待って、プロンプトを表示するクールなマッピングを次に示します<enter>
。
nnoremap gb :ls<CR>:b<Space>
このマッピングを使用すると、別のバッファーへの切り替えは次のように簡単です。
gb
(quickly scanning the list)
3<CR>
また:
gb
(quickly scanning the list)
foo<tab><CR>
このアイデアは、Bairui の Vim インフォグラフィックのコレクションから取ったこの画像から来ています。
Vim には、現在のバッファと前のバッファの間でジャンプする<C-^>
(または<C-6>
一部のキーボードでは) — と同等の通常モード —もあります。:b#
2 つのバッファーを頻繁に切り替える場合に使用します。
のバッファについてすべて読んでください:help buffers
。
宣言に移動
ファイル内では、gd
またはを使用できますgD
。
プロジェクト内では、Vim の「タグ」機能が役に立ちますが、ctags や cscope などの外部コード インデクサーが必要になります。最も基本的なコマンドは、メソッド名にカーソルを合わせた:tag foo
andです。<C-]>
どちらのツールも Vim にうまく統合されています。 :help tags
、:help ctags
およびを参照してください:help cscope
。
価値があるのは、タグ ナビゲーションを広範囲に使用してプロジェクト内を移動することです (主に CtrlP:CtrlPTag
と:CtrlPBufTag
コマンドを使用しますが、組み込みのものも使用します)。私のお気に入りの「一般的な」バッファ切り替え方法は名前によるものです。
構成のデプロイ
多くの Vim ユーザーは、自分の構成をバージョン管理下に置いています。これにより、新しいマシンに独自の構成を非常に迅速かつ簡単にインストールできます。考えてみてください。
編集
数か月前、古い Vim を使用してリモート マシンで作業する必要がありました。適切な Vim をインストールして、自分の最愛の構成を複製することもできましたが、今回は「鋸を研ぐ」ために身軽に移動することにしました。私はすぐにミニマリスト.vimrc
を作成し、半分忘れていたネイティブ機能をいくつか再検討しました。そのギグの後、CtrlP はそれほど必要ではないと判断し、削除しました。ネイティブ機能とカスタム マッピングはそれほど魅力的ではありませんが、多くの依存関係なしに仕事を完了できます。
ファイルのジャグリング
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
:find
set path
正しく使えば本当に素晴らしいコマンドです。私の設定では、現在のディレクトリに,ffoo<Tab>
含まれるすべてのファイルをfoo
再帰的に検索します。素早く、直感的で軽量です。もちろん、with:edit
や friends と同じ補完とワイルドカードの恩恵を受けています。
プロセスをさらに高速化するために、次のマッピングを使用すると、プロジェクトの一部全体をスキップして、現在のファイルのディレクトリの下で再帰的にファイルを見つけることができます。
nnoremap <leader>F :find <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>S :sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>V :vert sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>T :tabfind <C-R>=expand('%:h').'/*'<CR>
警告!このpath
オプションは非常に強力です。上記の値 — <code>.,** —は、デフォルトのフォールバック値として機能します。現実世界では、オプションの正確な値は project/language/framework/workflow から project/language/framework/workflow まで異なるため、適切な値は完全にニーズに依存します。その行をやみくもにコピーして、すべての問題が解決すると期待しないでください。
バッファとのジャグリング
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
上記のマッピングは、"wildmenu" で使用可能なバッファーを空のプロンプトでリストします。これにより、メニューをナビゲートするか<Tab>
、数文字を入力<Tab>
してリストを絞り込むことができます。上記のファイル マッピングと同様に、プロセスは迅速で、ほとんど摩擦がありません。
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
これらのマッピングは、それ自体を物語っています。
タグでジャグリング
nnoremap <leader>j :tjump /
このマッピングでは、単語全体の検索ではなく正規表現検索を使用,jba<Tab>
するため、 tag を見つけることができますfoobarbaz()
。
はい、あいまい一致は中毒性がありますが、それがなくても同じように生産性を高めることができます. しかもわずかな費用で。
もっと編集
いくつかの追加のヒント/コツ…</p>
ワイルドメニューのオプション
で有効化された「ワイルドメニュー」は、set wildmenu
ファイル/バッファのナビゲーションを容易にします。その動作は、調査する価値のある一連のオプションによって管理されます。
wildmode
"wildmenu" をどのように動作させたいかを Vim に伝えます:
set wildmode=list:full
wildignore
すべてのクラフトを除外します:
set wildignore=*.swp,*.bak
set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
set wildignore+=tags
set wildignore+=*.tar.*
wildignorecase
以下を検索しfoo
て見つけることができFoo
ます。
set wildignorecase
ファイルマーク
augroup VIMRC
autocmd!
autocmd BufLeave *.css normal! mC
autocmd BufLeave *.html normal! mH
autocmd BufLeave *.js normal! mJ
autocmd BufLeave *.php normal! mP
augroup END
私は最近、この宝石を他の人の~/.vimrc
. バッファを離れるたびに、カーソルの正確な位置にファイル マークが作成されるため、どこにいても、'J
編集した最新の JavaScript バッファにジャンプします。素晴らしい。