[解決済み] vim, vanilla Vim (プラグインなし)でファイル間を高速に切り替える
質問
プラグインを使わず、Vinilla Vim に限定することでエディタが制限されることは理解していますが、頻繁にマシンを切り替えるため、環境をあちこちに移動させるのが面倒な場合があります。私はただ vanilla Vim にとどまりたいのです。
私をためらわせるものは、ファイル間をすばやく切り替える能力です。
私は (少なくとも信じて)
バッファ
,
ウィンドウ
,
タブ
と同様、netrw (
Vex
,
Ex
など)。
しかし、以下のようなエディタでは サブライムテキスト のようなエディタでは、私はただ ctrl - p で、即座にこのファイルにたどり着きます。
シェルにドロップダウンできることは知っていますが、Vim でファイル名だけでなく、ファイル間をすばやく切り替えるための他の "hidden" 秘密はないのでしょうか。
どのように解決するのですか?
ST2に最も近い("close"、"exact"ではない)等価な Ctrl + P というプラグインで、用意するのは CtrlP . のような他の類似のプラグインがあります。 コマンド-T または ファジーファインダー .
私は CtrlP を使っていて、とても気に入っていますが、プラグインを使わないというあなたの決断を心から支持します。
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 の "tags" 機能が便利ですが、ctags や cscope のような外部のコードインデクサが必要です。最も基本的なコマンドは
:tag foo
と
<C-]>
でメソッド名にカーソルを合わせます。どちらのツールも Vim にうまく統合されています。
:help tags
,
:help ctags
と
:help cscope
.
参考までに、私はプロジェクト内の移動にタグナビゲーションを多用しています(CtrlPの
:CtrlPTag
と
:CtrlPBufTag
コマンドを使用し、私のお気に入りのバッファ切り替え方法は名前によるものです。
コンフィグをデプロイする
多くの Vim ユーザは設定をバージョン管理下に置いています。 非常に を迅速かつ簡単にインストールできます。考えてみてください。
EDIT
数ヶ月前、私は古い Vim を使ってリモート マシンで仕事をする必要がありました。適切な Vim をインストールし、自分の愛すべき設定をクローンすることもできましたが、今回は、鋸を研ぐために身軽な旅をすることにしました。私はすぐに最小限の
.vimrc
を素早く構築し、半ば忘れかけていたいくつかのネイティブ機能を再訪しました。ネイティブ機能とカスタム マッピングはそれほどセクシーではありませんが、多くの依存関係なしに仕事をこなすことができます。
ファイルとのジャグリング
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
を含む全てのファイルを再帰的に検索します。これは素早く、直感的で、軽量です。もちろん、補完やワイルドカードの恩恵は
:edit
などと同じように補完とワイルドカードの恩恵を受けています。
このプロセスをさらに速くするために、以下のマッピングによって、プロジェクトの部分全体をスキップして、現在のファイルのディレクトリの下で再帰的にファイルを見つけることができます。
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
オプションは
極めて
を強力にします。上の値-
.,**
-機能
私にとっては
,
をデフォルトのフォールバック値として
. 現実世界では、オプションの正確な値は、プロジェクト/言語/フレームワーク/ワークフローごとに異なるので、そのために
適切な
に完全に依存します。
の
のニーズに完全に依存します。その行をやみくもにコピーして、それがすべての問題を解決してくれると期待しないでください。
バッファとの格闘
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>
というタグを見つけることができます。
foobarbaz()
.
確かにファジーマッチは病みつきになりますが、それをしなくても同じように生産性を上げることができます。しかも、ほんのわずかなコストで。
その他の編集
いくつかの追加のヒント/トリック...
ワイルドメニューのオプション
で有効になる "wildmenu"。
set wildmenu
で有効になり、ファイル/バッファのナビゲーションがより簡単になります。その動作は、調査する価値のある多くのオプションによって制御されます。
wildmode
は Vim に "wildmenu" をどのように動作させたいかを指示します。
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 バッファにジャンプします。素晴らしい。
関連
-
[解決済み] Vim の "Press ENTER or type command to continue" プロンプトを無効にするにはどうしたらいいですか?
-
[解決済み] ~/.vimrcを読み込まない
-
[解決済み] Vimのマッピングコマンドであるremap, noremap, nnoremap, vnoremapの違いは何ですか?
-
[解決済み] EmacsとVimの違い
-
[解決済み] Vim 80カラムのレイアウトに関する懸念
-
[解決済み] vim と NERD Tree 拡張 - ファイルを追加する
-
[解決済み】Vimで複数のファイルを効率的に操作する方法
-
[解決済み】Vimを遅くしているプラグインを確認する方法は?
-
[解決済み】Vimでロードされたプラグインを一覧表示する方法は?
-
[解決済み] VIM挿入モードでの文字の繰り返し
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Vim でカーソル下の完全なパスからファイルを開く
-
[解決済み] ヴィム このバッファ以外のバッファを閉じる
-
[解決済み] Vimで最も生産性の高いショートカットは何ですか?
-
[解決済み] Vimでクリップボードにコピーする方法は?
-
[解決済み] vimでタブをスペースに置き換える
-
[解決済み】Vimで'gf'から戻るにはどうしたらいいのか?
-
[解決済み】なぜVimのエキスパートはタブよりもバッファを好むのでしょうか?[クローズド]
-
[解決済み] Vim: 起動時のバッファと同じように、別の [No Name] バッファを開くにはどうしたらいいですか?
-
[解決済み] vimでカレントファイルの表示名?
-
[解決済み] Vimで前に開いていたファイルに戻るには?重複