113

バニラ Vim (プラグインを使用しない) に制限するとエディターの機能が制限されることは理解していますが、異なるマシンを頻繁に切り替えるため、環境をどこにでも移動するのは面倒です。バニラのVimにとどまりたいです。

私を妨げているのは、ファイルをすばやく切り替える機能です。私は (少なくとも信じています) bufferswindows、 tab 、およびnetrw ( VexExなど) について十分に理解しています。

しかし、 Sublime Textなどのエディターでは、入力するだけctrlpすぐにファイルにアクセスできます。

シェルにドロップダウンできることはわかっていますが、ファイル名だけでなく、Vimでファイルをすばやく切り替えるための「隠された」秘密が他にあるのではないかと思います。

4

7 に答える 7

265

CtrlST2 の+に最も近いもの (「正確」ではなく「最も近い」)は、get ready… CtrlPPというプラグインです。Command-TFuzzyFinderなど、他にも同様のプラグインがあります。

私は 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 インフォグラフィックのコレクションから取ったこの画像から来ています。

フライング vs サイクリング

Vim には、現在のバッファと前のバッファの間でジャンプする<C-^>(または<C-6>一部のキーボードでは) — と同等の通常モード —もあります。:b#2 つのバッファーを頻繁に切り替える場合に使用します。

のバッファについてすべて読んでください:help buffers


宣言に移動

ファイル内では、gdまたはを使用できますgD

プロジェクト内では、Vim の「タグ」機能が役に立ちますが、ctags や cscope などの外部コード インデクサーが必要になります。最も基本的なコマンドは、メソッド名にカーソルを合わせた:tag fooandです。<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 *

:findset 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 バッファにジャンプします。素晴らしい。

于 2013-04-18T13:29:28.967 に答える
4

プラグインなしで、コマンド ラインでワイルドカード タブ補完を実行できます。例えば

:e src/**/foo*<tab>

./src の下のディレクトリ ツリーで 'foo' で始まるすべてのファイルを循環し、編集するファイルを選択できます。

すでにファイルを編集していて、まだバッファにある場合は、次のように切り替えることができます。

:b foo<tab>

パスに「foo」を含むすべてのバッファを循環します。必要な動作を得るには、wildmode および wildmenu オプションを設定する必要がある場合があります。私は持っている

wildmode=longest:full
wildmenu

私の.vimrcで。

于 2013-04-18T17:11:51.440 に答える
2

ファイル名があり、そのファイルにジャンプしたい場合は、gfが実行します。また、プラグインではないctagsを使用するのも好きです。タグを作成するだけで、コードベースを簡単に移動できます。

于 2013-04-18T13:01:15.807 に答える
1

vimエディターでファイルを切り替えたい場合は、以下の回答を参照してください

最初Escにキーを押して編集モードを終了します。

次に、入力:eして現在のファイルパスを確認します。

別のファイルに移動したい場合:e /path-of-file.txt/は、これを使用して入力すると、切り替えることができます。

前のファイルに移動する場合は:e#、前のファイル パスへのスイッチを入力するだけです。

于 2015-11-28T11:47:53.540 に答える