1169

私は Vim を使用して Perl スクリプトを開発し始めましたが、Vim が非常に強力であることに気付き始めています。

私が気に入っていることの 1 つは、次の方法で一度に複数のファイルを開くことができることです。

vi main.pl maintenance.pl

そして、それらの間を次のようにホップします:

:n
:prev

どのファイルが開いているかを確認します。

:args

ファイルを追加するには、次のように言えます。

:n test.pl

ファイルのリストに追加されると思いますが、代わりに現在のファイルリストを消去し、入力すると開い:argsているだけです。test.pl

では、引数リストにファイルを追加および削除するにはどうすればよいでしょうか?

4

29 に答える 29

1229

タブ (Vim 7 で導入) を使用しないのはなぜですか? :tabn:tabpでタブを切り替えることができ:tabe <filepath>ます。 で新しいタブを追加できます。通常のタブを閉じる:q:wq、タブを閉じます。/キーに:tabnand:tabpをマップすると、ファイルを簡単に切り替えることができます。F7F8

ファイルがそれほど多くない場合、または Vim 7 を持っていない場合は、画面を複数のファイルに分割することもできます: :sp <filepath>. Ctrl次に、 +で分割画面を切り替えWてから、移動したい方向に矢印キーを押します (または、矢印キーの代わりに、w次の分割画面とW前の分割画面の場合)。

于 2008-09-10T09:09:32.840 に答える
579

上場

現在のバッファのリストを表示するには、次を使用します。

:ls

オープニング

新しいファイルを開くには、次を使用します

:e ../myFile.pl

強化されたタブ補完 (に入れset wildmenuます.vimrc)。

注::find一連のパスを検索する which を使用することもできますが、最初にそれらのパスをカスタマイズする必要があります。


スイッチング

開いているすべてのファイルを切り替えるには、次を使用します

:b myfile

強化されたタブ補完 (まだset wildmenu)。

注::b#最後にアクセスしたファイルが選択されるため、2 つのファイルをすばやく切り替えることができます。


ウィンドウの使用

Ctrl-W sCtrl-W v現在のウィンドウを水平方向と垂直方向に分割します。:split:vertical split(:sp:vs)を使用することもできます

Ctrl-W w開いているウィンドウを切り替えるには、およびCtrl-W h(またはjまたはkまたはl) 開いているウィンドウをナビゲートします。

Ctrl-W c現在のウィンドウを閉じ、現在のウィンドウCtrl-W o以外のすべてのウィンドウを閉じます。

-oまたはフラグを付けて vim を起動すると、-O各ファイルが独自の分割で開きます。


これらすべてがあれば、Vim にタブは必要ありません。私の目ではなく、指がバッファーを見つけます。

注: すべてのファイルを Vim の同じインスタンスに移動する場合は、オプションを指定して Vim を起動し--remote-silentます。

于 2008-09-10T09:47:47.897 に答える
243
:ls

開いているバッファのリスト

  • :bp前のバッファ
  • :bn次のバッファ
  • :bnn数値)n番目のバッファに移動
  • :b <filename-part>オートコンプリートを提供するタブキー付き(素晴らしい!!)

一部のバージョンのvimではbnbp実際bnextにはbpreviousそれぞれです。この場合、タブのオートコンプリートが役立ちます。

または、通常モードの場合は、を使用^して、最後に作業していたファイルに切り替えます。

さらに、vimのセッションを保存できます

:mksession! ~/today.ses

上記のコマンドは、現在開いているファイルバッファと設定をに保存します~/today.ses。を使用してそのセッションをロードできます

vim -S ~/today.ses

昨日中断した場所を覚えておくのは面倒ではありません。;)

于 2008-09-15T19:03:17.490 に答える
121

リストに追加するにはargs:

:argadd

リストから削除するにはargs:

:argdelete

この例では、test.pl を使用:argeditして test.pl をargsリストに追加し、ファイルを 1 ステップで編集できます。

:help argsより詳細で高度な使用法を提供します

于 2008-09-10T09:34:10.643 に答える
49

私はバッファコマンドを使用します- :bn(次のバッファ)、:bp(前のバッファ):buffers(開いているバッファのリスト):b<n>(バッファnを開く)(:bdバッファを削除)。:e <filename>新しいバッファに開くだけです。

于 2008-09-10T09:43:53.477 に答える
46

開いているファイルのリストを表示するために間違ったコマンドを使用している可能性があります。

を実行し:lsて、開いているファイルのリストを表示すると、次のように表示されます。

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

次に、リストされた番号でファイルを参照することで、ファイルをバウンスできます。例: :3b

または、番号を入力して画面を分割することもできますが、b の代わりに sb を使用します。

余談ですが、% は現在表示されているファイルを指し、# は別のファイルを指します。

を押すと、これら 2 つのファイルを簡単に切り替えることができます。Ctrl Shift 6

編集:削除したものを含む 0 ~ 9 のレジスタを含むレジスタの現在の内容を確認するために:ls使用できるように。:regこれは、以前に削除したテキストを再利用したい場合に特に便利です。

于 2008-09-10T09:34:14.573 に答える
40

Vim (元の Vi ではありません!) には、(多くのコンテキストで) バッファーよりも優れていると思われるタブがあります。:tabe [filename]ファイルを新しいタブで開くと言うことができます。タブ間の循環は、タブをクリックするか、キーの組み合わせ [ n ]gtと で行いgTます。グラフィカル Vim にはグラフィカルなタブもあります。

于 2008-09-10T09:07:48.303 に答える
27

:e次のようなもの:baddは1つの引数のみを受け入れるため、次の引数は失敗します

:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*

vim内から複数のファイルを追加する場合は、arga[dd]

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*
于 2011-12-08T19:43:13.467 に答える
27

ここにたくさんの答えがあります!私が車輪を再発明せずに使用しているもの - 最も有名なプラグイン (すぐに死ぬことはなく、多くの人が使用している) は、超高速でマニアックです。

  • ctrlpvim/ctrlp.vim - ファイルを名前で検索する 場所または名前だけでファジー検索する
  • jlanzarotta/bufexplorer - 開いているバッファを参照する (最近開いて変更したファイルの数を覚えておらず、それらがどこにあるかも覚えていない場合、おそらく Ag で検索したため)
  • gitignoreに関してファイルを検索するrking/ag.vim
  • scrooloose/nerdtreeディレクトリ構造の確認、ルックアラウンド、ファイルの追加/削除/変更

編集:最近、dyng/ctrlsf.vim を使用してコンテキスト ビュー (Sublime 検索など) で検索し、エンジンをagからripgrepに切り替えました。パフォーマンスは抜群です。

EDIT2 : CtrlSFと共にmg979 /vim-visual-multiを使用して、複数のファイルを一度に変更し、最後に一度に保存することができます。

于 2016-03-31T11:47:02.843 に答える
26

このスレッドの一部の回答は、タブの使用を提案し、他の回答はバッファを使用して同じことを達成することを提案しています。タブとバッファは異なります。この記事「Vim Tab Madness - Buffers vs Tabs」を読むことを強くお勧めします。

記事から抜粋した素晴らしい要約を次に示します。

概要:

  • バッファは、ファイルのメモリ内テキストです。
  • ウィンドウは、バッファー上のビューポートです。
  • タブ ページは、ウィンドウの集まりです。
于 2015-06-18T12:47:20.960 に答える
19

vim で複数のファイルを使用する場合、主にこれらのコマンドを使用します (約 350 個のファイルを開いています)。

  • :b <partial filename><tab>(バッファにジャンプ)
  • :bw(バッファワイプ、バッファを削除)
  • :e <file path>(編集、新しいバッファを開く>
  • pltags- サブルーチン/メソッド定義へのジャンプを有効にする
于 2008-09-15T17:15:35.797 に答える
19

これはどの回答でもカバーされていないため、別の回答を追加します

すべてのバッファをtab表示に変更します。

 :tab sball

すべてのバッファをタブ ビューで開きます。次に、タブ関連のコマンドを使用できます

gt or :tabn           "    go to next tab
gT or :tabp or :tabN  "    go to previous tab

詳細は:help tab-page-commands.

複数のファイルをタブ ビューとして開くように vim に指示できますvim -p file1 file2alias vim='vim -p'役に立ちます。
同じことは、次の自動コマンドを使用して達成することもできます~/.vimrc

 au VimEnter * if !&diff | tab all | tabfirst | endif

とにかく質問に答えるには: To add to arg list: arga file,

引数リストから削除するには:argd pattern

もっと:help arglist

于 2017-07-05T20:02:51.293 に答える
12

gVim とコマンドライン Vim で同じ .vimrc ファイルを使用しています。私は gVim ではタブを使用し、コマンドライン Vim ではバッファーを使用する傾向があるため、.vimrc を設定して両方を簡単に操作できるようにしています。

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

Hこれにより、との既存のマッピングが破壊Lされますが、ファイル間の切り替えが非常に高速かつ簡単になります。H次とL前を押すだけです。タブまたはバッファのどちらを使用していても、意図した結果が得られます。

于 2008-09-17T14:43:18.783 に答える
10

複数のバッファを使用する場合、最も重要なことは非表示に設定することだと思います。これにより、残しているバッファに未保存の変更がある場合でもバッファを切り替えることができます。

于 2008-09-15T14:39:04.427 に答える
7

複数のファイルを効果的に操作する私の方法は、tmux を使用することです。

次のように、ウィンドウを垂直方向と水平方向に分割できます。

ここに画像の説明を入力

Mac と Linux の両方のマシンでこの方法で動作させていますが、(Mac で) 提供されているネイティブのウィンドウ ペイン切り替えメカニズムよりも優れていることがわかりました。切り替えが簡単で、tmux を使用した場合にのみ、Mac で「同じ現在のディレクトリにある新しいページ」を取得できました (同じディレクトリに新しいペインを開くオプションがあるように見えるにもかかわらず)。驚くほど重要な作品。現在の場所に即座に新しいペインが表示されるのは、驚くほど便利です。両方の OS で同じキー コンボを使用して新しいペインを作成する方法は、私にとって重要であり、将来の個人的な互換性のためにすべての人にとってボーナスです。複数の tmux ペインとは別に、複数のタブ、たとえばここに画像の説明を入力複数の新しいウィンドウを使用してみました。ここに画像の説明を入力そして最終的に、複数の tmux ペインが最も役立つことがわかりました。私は非常に「視覚的」で、さまざまなコンテキストを目の前に置いて、ペインとして一緒に接続するのが好きです。

screentmux は、古いものではサポートされていなかった水平および垂直ペインもサポートしています (ただし、mac の iterm2 はサポートしているようですが、現在のディレクトリ設定は機能しませんでした)。tmux 1.8

于 2014-01-19T18:24:13.607 に答える
3

ファイルに非表示に設定された複数のバッファを使用してい~/.vimrcます。

ミニバッファー エクスプローラー スクリプトも、バッファーのコンパクトなリストを取得するのに便利です。次に:b1、または:b2... で適切なバッファーに移動するか、ミニバッファー エクスプローラーを使用してバッファーをタブで移動します。

于 2008-09-16T19:05:17.257 に答える
2

私が使用しているワークフローを示す非常に簡単なビデオを作成しました。基本的にはCtrl-P Vim プラグインを使用し、バッファー ナビゲーションを Enter キーにマッピングしました。

このようにして、通常モードで Enter キーを押し、開いているファイルのリスト (画面下部の小さな新しいウィンドウに表示されます) を見て、編集するファイルを選択し、もう一度 Enter キーを押します。開いている複数のファイルをすばやく検索するには、ファイル名の一部を入力し、ファイルを選択して Enter キーを押します。

ビデオで開いているファイルは多くありませんが、ファイルがたくさんあると非常に役立ちます。

プラグインは MRU 順序を使用してバッファーをソートするため、Enter キーを 2 回押すだけで、編集していた最新のファイルにジャンプできます。

プラグインをインストールしたら、必要な構成は次のとおりです。

nmap <CR> :CtrlPBuffer<CR>

もちろん、別のキーにマッピングすることもできますが、入力するマッピングが非常に便利だと思います。

于 2015-12-05T18:59:28.847 に答える
1

VIM を使い始めたとき、タブが別のウィンドウ レイアウトとして使用されることになっていて、バッファが複数のファイルの編集/相互間の切り替えの役割を果たしていることに気づきませんでした。実際、最初は v7.0 より前のタブさえありませんでした。ターミナル タブ内で 1 つの VIM を開き (現時点では gnome-terminal を使用していました)、次のようなコマンドを使用すると考えていたため、alt+numbers を使用してタブを切り替えました。 :buffers、:bn、:bp は私には多すぎました。VIM 7.0 がリリースされたとき、多くのファイルを管理してそれに切り替える方が簡単であることがわかりましたが、最近、1 つのことを除いて、バッファーを常に使用する必要があることに気付きました。それが正しく機能するように構成する必要がある場合です。

そこで、vim-airline を試して、ビジュアル オントップ タブのようなバッファ バーを有効にしましたが、iTerm2 でグラフィックに問題があったため、他のいくつかを試してみたところ、MBE が最適に機能するようです。元のショートカット (現在のページの先頭/末尾への移動) はあまり役に立たないため、shift+h/l もショートカットとして設定しました。

map <S-h> :bprev<Return>
map <S-l> :bnext<Return>

gt や gT よりもさらに簡単なようで、:e は :tabnew よりも簡単です。:bd は :q ほど便利ではありませんが (MBE には問題があります)、バッファー内のすべてのファイルを処理できます。

于 2015-04-13T02:46:39.907 に答える
1

このスレッドの回答のほとんどは、もちろん問題ない単純なvimコマンドを使用していますが、特に役立つと思うプラグインと機能の組み合わせを使用して広範な回答を提供すると思いました(少なくともこれらのヒントのいくつかはGary Bernhardtのファイルから来ましたナビゲーションのヒント):

  1. 最後の 2 つのファイルを切り替えるには、2<leader>回押します。スペースバーに割り当てることをお勧め<leader>します:

    nnoremap <leader><leader> <c-^>
    
  2. プロジェクト内をすばやく移動するための答えは、CtrlPなどのファジー マッチング ソリューションです。<leader>aすばやくアクセスできるようにバインドします。

  3. 現在開いているバッファを視覚的に表示したい場合は、BufExplorer プラグインを使用します。シンプルだが効果的。

  4. ファイル システムをブラウズしたい場合は、コマンド ラインまたは外部ユーティリティ (Quicklsilver、Afred など) を使用しますが、現在のプロジェクト構造を確認するには、 NERD ツリーが古典的です。2ただし、これをメインのファイル検索方法の代わりに使用しないでください。それは本当にあなたを遅くします。バインディングを使用してい<leader>ffます。

これらは、ファイルを見つけて開くには十分なはずです。そこからもちろん、水平および垂直分割を使用します。分割に関しては、次の関数が特に便利だと思います。

  1. 十分なスペースがない場合は、小さなエリアで新しい分割を開き、ナビゲーションでそれらを拡張します。これらが正確に何をするかについてのコメントは、こちらを参照してください。

    set winwidth=84
    set winheight=5
    set winminheight=5
    set winheight=999
    
    nnoremap <C-w>v :111vs<CR>
    nnoremap <C-w>s :rightbelow split<CR>
    set splitright
    
  2. 分割から分割への移動が簡単:

    nnoremap <C-J> <C-W><C-J>
    nnoremap <C-K> <C-W><C-K>
    nnoremap <C-L> <C-W><C-L>
    nnoremap <C-H> <C-W><C-H>
    
于 2016-02-27T12:04:38.650 に答える
0

osx を使用していて、タブをクリックできるようにしたい場合は、MouseTerm と SIMBL を使用します (ここから取得)。また、この関連する議論もチェックしてください。

于 2013-05-31T09:33:25.790 に答える