Usr_07

Nvimの:helpページは、生成され、ソースからtree-sitter-vimdocパーサーを使用して作成されています。


VIMユーザマニュアル - Bram Moolenaar著
複数のファイルの編集
ファイルの数に関わらず、Vimを終了せずに編集できます。作業対象のファイルのリストを定義し、あるファイルから別のファイルへジャンプできます。あるファイルからテキストをコピーして、別のファイルに貼り付けることができます。
07.1 別のファイルの編集 07.2 ファイルのリスト 07.3 ファイル間のジャンプ 07.4 バックアップファイル 07.5 ファイル間でのテキストのコピー 07.6 ファイルの表示 07.7 ファイル名の変更
次の章: usr_08.txt ウィンドウの分割 前の章: usr_06.txt 構文強調の使用 目次: usr_toc.txt

別のファイルの編集

これまでは、編集したいファイルごとにVimを起動する必要がありました。もっと簡単な方法があります。別のファイルの編集を開始するには、次のコマンドを使用します。
:edit foo.txt
"foo.txt" の代わりに任意のファイル名を使用できます。Vimは現在のファイルを閉じて、新しいファイルを開きます。ただし、現在のファイルに未保存の変更がある場合、Vimはエラーメッセージを表示し、新しいファイルを開きません。
E37: 前回の変更から書き込まれていません (上書きするには ! を使用)
注: Vimは各エラーメッセージの先頭にエラーIDを付加します。メッセージの意味や原因がわからない場合は、ヘルプシステムでこのIDを調べてください。この場合は
:help E37
この時点で、いくつかの選択肢があります。次のコマンドを使用してファイルを書き込むことができます。
:write
または、強制的にVimに変更を破棄させて新しいファイルを編集するには、強制 (!) 文字を使用します。
:edit! foo.txt
別のファイルを編集したいが、現在のファイルの変更をまだ書き込みたくない場合は、非表示にすることができます。
:hide edit foo.txt
変更を含むテキストはまだそこにありますが、表示することはできません。これについては、22.4: バッファリストでさらに詳しく説明します。

07.2 ファイルのリスト

Vimを起動して、ファイルのシーケンスを編集することができます。例えば
vim one.c two.c three.c
このコマンドはVimを起動し、3つのファイルを編集することを伝えます。Vimは最初のファイルのみを表示します。このファイルで作業を終えた後、次のファイルを編集するには、次のコマンドを使用します。
:next
現在のファイルに未保存の変更がある場合は、エラーメッセージが表示され、":next"は機能しません。これは、前のセクションで説明した":edit"と同じ問題です。変更を破棄するには
:next!
ただし、ほとんどの場合は変更を保存して次のファイルに進みたいはずです。これには特別なコマンドがあります。
:wnext
これは、2つの別々のコマンドを使用するのと同じです。
:write
:next
現在位置
引数リスト内のどのファイルを編集しているかを確認するには、ウィンドウタイトルを確認してください。「(2 of 3)」のようなものが表示されているはずです。これは、3つのファイルのうち2番目のファイルを編集していることを意味します。ファイルのリストを確認するには、次のコマンドを使用します。
:args
これは "arguments" の略です。出力は次のようになります。
one.c [two.c] three.c
これらはVimを起動したときに指定したファイルです。現在編集している "two.c" は角括弧で囲まれています。

別の引数への移動

前のファイルに戻るには
:previous
これは ":next" コマンドと似ていますが、反対方向に移動する点が異なります。ここでも、最初にファイルを書き込みたい場合のショートカットコマンドがあります。
:wprevious
リストの最後のファイルに移動するには
:last
そして、最初に戻るには
:first
ただし、":wlast" または ":wfirst" コマンドはありません!
":next" および ":previous" にはカウントを使用できます。2つのファイルをスキップして先に進むには
:2next

自動書き込み

ファイルを移動して変更を行う場合は、":write" を使用する必要があることを覚えておく必要があります。そうしないと、エラーメッセージが表示されます。変更されたファイルを常に書き込みたい場合は、Vimに自動的に書き込むように指示できます。
:set autowrite
書き込みたくないファイルを編集している場合は、再度オフにしてください。
:set noautowrite

別のファイルリストの編集

Vimを終了して再起動する必要なく、ファイルのリストを再定義できます。次のコマンドを使用して、他の3つのファイルを編集します。
:args five.c six.c seven.h
または、シェルで使用されているように、ワイルドカードを使用します。
:args *.txt
Vimはリストの最初のファイルに移動します。繰り返しますが、現在のファイルに変更がある場合は、最初にファイルを書き込むか、":args!" (最後に ! を追加) を使用して変更を破棄できます。
最後のファイルを編集しましたか? arglist-quit
ファイルのリストを使用すると、Vimはそれらすべてを編集することを前提としています。早すぎる終了を防ぐために、リストの最後のファイルをまだ編集していない場合は、次のエラーが表示されます。
E173: 編集するファイルが他に46個あります
本当に終了したい場合は、もう一度実行してください。そうすれば機能します (ただし、その間に他のコマンドを実行した場合は機能しません)。

07.3 ファイル間のジャンプ

2つのファイル間をすばやくジャンプするには、CTRL-^ (英語(米国)キーボードでは、^は6キーの上にあります) を押します。例
:args one.c two.c three.c
これでone.cにいます。
:next
これでtwo.cにいます。ここで、CTRL-^を使用してone.cに戻ります。もう一度CTRL-^を押すと、two.cに戻ります。もう一度CTRL-^を押すと、再びone.cになります。ここで
:next
これでthree.cにいます。CTRL-^コマンドは、ファイルリスト内の現在位置の概念を変更しないことに注意してください。":next" や ":previous" のようなコマンドのみがそれを変更します。
以前に編集していたファイルは「代替」ファイルと呼ばれます。Vimを起動したばかりのときは、以前のファイルが存在しないため、CTRL-^は機能しません。

定義済みのマーク

別のファイルにジャンプした後、非常に便利な2つの定義済みマークを使用できます。
`"
これは、ファイルを離れたときにカーソルがあった位置に移動します。記憶されているもう1つのマークは、最後に変更を加えた位置です。
`.
ファイル "one.txt" を編集しているとします。ファイルの中ほどで、"x" を使用して文字を削除します。次に、"G" で最後の行に移動し、":w" でファイルを書き込みます。他のいくつかのファイルを編集してから、":edit one.txt" を使用して "one.txt" に戻ります。ここで使用すると、Vimはファイルの最後の行にジャンプします。を使用すると、文字を削除した位置に移動します。ファイル内を移動した場合でも、".は記憶された位置に移動します。少なくとも別の変更を行うか、ファイルを離れるまでは。

ファイルマーク

03.10で、"mx"を使用してファイルにマークを付け、"`x"でその位置にジャンプする方法について説明しました。これは1つのファイル内で機能します。別のファイルを編集してそこにマークを付けると、それらのマークはそのファイル固有になります。したがって、各ファイルには独自のマークのセットがあり、ファイルに対してローカルです。これまでは小文字のマークを使用していました。大文字のマークもあります。これらはグローバルであり、任意のファイルから使用できます。たとえば、ファイル "foo.txt" を編集しているとします。ファイルの中ほどまで移動し ("50%")、そこにFマーク (fooのF) を付けます。
50%mF
次に、ファイル "bar.txt" を編集し、その最後の行にBマーク (barのB) を付けます。
GmB
これで、"'F" コマンドを使用して、foo.txtの中ほどまでジャンプバックできます。または、別のファイルを編集し、"'B" を入力すると、bar.txtの最後にジャンプします。
ファイルマークは、別の場所に配置されるまで記憶されます。したがって、マークを配置し、数時間編集しても、そのマークにジャンプバックすることができます。マークの文字と配置場所の間に単純なつながりを考えると便利な場合があります。たとえば、ヘッダーファイルではHマーク、MakefileではM、CコードファイルではCを使用します。
特定のマークがどこにあるかを確認するには、":marks" コマンドに引数を渡します。
:marks M
複数の引数を渡すこともできます。
:marks MCP
マークを配置せずに古い位置と新しい位置にジャンプするには、CTRL-OCTRL-Iを使用できることを忘れないでください。

07.4 バックアップファイル

通常、Vimはバックアップファイルを生成しません。バックアップファイルが必要な場合は、次のコマンドを実行するだけです。
:set backup
バックアップファイルの名前は、元のファイルに ~ を追加したものです。たとえば、ファイルの名前がdata.txtの場合、バックアップファイルの名前はdata.txt~です。バックアップファイルの末尾が ~ で終わるのが気に入らない場合は、拡張子を変更できます。
:set backupext=.bak
これにより、data.txt~の代わりにdata.txt.bakが使用されます。ここで重要になるもう1つのオプションは、'backupdir'です。これは、バックアップファイルが書き込まれる場所を指定します。デフォルトでは、バックアップを元のファイルと同じディレクトリに書き込むのが適切でしょう。
注: 'backup'オプションが設定されていなくても、'writebackup'が設定されている場合、Vimはバックアップファイルを作成します。ただし、ファイルの書き込みが正常に完了するとすぐに削除されます。これは、書き込みが何らかの原因で失敗した場合に (ディスクフルが最も一般的な原因です。落雷も別の原因となる可能性がありますが、あまり一般的ではありません)、元のファイルを失うことに対する安全策として機能します。

元のファイルを保持する

ソースファイルを編集している場合は、変更を加える前のファイルを保持したい場合があります。ただし、バックアップファイルはファイルを書き込むたびに上書きされます。したがって、最初のバージョンではなく、前のバージョンのみが含まれます。Vimに元のファイルを保持させるには、'patchmode'オプションを設定します。これにより、変更されたファイルの最初のバックアップに使用される拡張子が指定されます。通常、次のようにします。
:set patchmode=.orig
これで、ファイルdata.txtを初めて編集し、変更を加えてファイルを書き込むと、Vimは変更されていないファイルのコピーを "data.txt.orig" という名前で保持します。ファイルにさらに変更を加えると、Vimは "data.txt.orig" がすでに存在することに気づき、そのままにします。それ以降のバックアップファイルは、"data.txt~" ('backupext'で指定したものが使用されます) という名前になります。'patchmode'を空のままにした場合 (これがデフォルトです)、元のファイルは保持されません。

07.5 ファイル間でのテキストのコピー

ここでは、あるファイルから別のファイルにテキストをコピーする方法について説明します。簡単な例から始めましょう。コピーしたいテキストを含むファイルを編集します。カーソルをテキストの先頭に移動し、"v" を押します。これにより、ビジュアルモードが開始されます。次に、カーソルをテキストの末尾に移動し、"y" を押します。これにより、選択したテキストがヤンク (コピー) されます。上記の段落をコピーするには、次のようにします。
:edit thisfile
/This
vjjjj$y
次に、テキストを配置するファイルを編集します。テキストを挿入したい文字の場所にカーソルを移動します。"p" を使用して、テキストをそこに貼り付けます。
:edit otherfile
/There
p
もちろん、テキストをヤンクするために他の多くのコマンドを使用できます。たとえば、行全体を選択するには、"V" でビジュアルモードを開始します。または、CTRL-V を使用して長方形のブロックを選択します。または、"yy" を使用して1行をヤンクし、"yaw" を使用して単語をヤンクするなど。"p" コマンドは、カーソルの後にテキストを貼り付けます。カーソルの前にテキストを貼り付けるには、"P" を使用します。Vimは、行全体またはブロックをヤンクしたかどうかを記憶し、そのように貼り付けることに注意してください。

レジスタの使用

あるファイルから別のファイルへ複数のテキストをコピーしたい場合、ファイルを切り替えたり、対象ファイルに書き込んだりするのに時間がかかります。これを避けるには、各テキストをそれぞれ別のレジスタにコピーします。レジスタとは、Vimがテキストを保存する場所です。ここでは、aからzの名前のレジスタを使用します(後で他のレジスタがあることがわかります)。文をfレジスタ(Firstのf)にコピーしてみましょう。
"fyas
「yas」コマンドは、以前と同様に文をヤンクします。「f」は、Vimにテキストをfレジスタに入れることを指示します。これは、ヤンクコマンドの直前になければなりません。次に、3行全体をlレジスタ(lineのl)にヤンクします。
"l3yy
カウントは「l」の前でも同じようにできます。テキストブロックをb(blockのb)レジスタにヤンクするには、次のようにします。
CTRL-Vjjww"by
レジスタ指定「"b」が「y」コマンドの直前にあることに注意してください。これは必須です。「w」コマンドの前に置いた場合、機能しません。これで、f、l、bレジスタに3つのテキストが保存されました。別のファイルを編集し、テキストを配置したい場所に移動します。
"fp
ここでも、レジスタ指定「"f」は「p」コマンドの前にあります。レジスタは任意の順序で配置できます。また、テキストは、何かをヤンクして上書きするまでレジスタに残ります。したがって、何度でも配置できます。
テキストを削除するときも、レジスタを指定できます。これを使用して、複数のテキストを移動します。たとえば、単語を削除してwレジスタに書き込むには、次のようにします。
"wdaw
ここでも、レジスタ指定は削除コマンド「d」の前にきます。
ファイルへの追記
テキストの行を1つのファイルに収集する場合は、次のコマンドを使用できます。
:write >> logfile
これにより、現在のファイルのテキストが「logfile」の末尾に書き込まれます。したがって、追記されます。これにより、行をコピーし、ログファイルを編集してそこに配置する必要がなくなります。つまり、2つのステップを節約できます。ただし、ファイルの末尾にのみ追記できます。数行のみを追記するには、「:write」を入力する前にビジュアルモードでそれらを選択します。10章では、行の範囲を選択する別の方法を学びます。

07.6 ファイルの表示

ファイルを書き戻す意図なしに、ファイルの内容だけを確認したい場合があります。「:w」をうっかり入力して、元のファイルを上書きしてしまうリスクがあります。これを避けるには、ファイルを読み取り専用で編集します。Vimを読み取り専用モードで起動するには、次のコマンドを使用します。
vim -R file
Unixでは、このコマンドも同じことを行うはずです。
view file
これで、「file」を読み取り専用モードで編集しています。「:w」を使用しようとすると、エラーメッセージが表示され、ファイルは書き込まれません。ファイルを変更しようとすると、Vimは警告を表示します。
W10: 警告: 読み取り専用ファイルの変更
ただし、変更は行われます。これにより、たとえば、ファイルを簡単に読めるようにフォーマットできます。ファイルを変更して、それが読み取り専用であったことを忘れた場合でも、書き込むことができます。書き込みを強制するには、書き込みコマンドに「!」を追加します。
本当にファイルの変更を禁止したい場合は、次のようにします。
vim -M file
これで、テキストを変更しようとするたびに失敗します。ヘルプファイルは、たとえばこのようになっています。変更を試みると、次のエラーメッセージが表示されます。
E21: 変更できません、'modifiable' がオフです
Vimをビューアモードで動作させるために、-M引数を使用できます。ただし、これらのコマンドは保護を解除するため、これは任意です。
:set modifiable
:set write

07.7 ファイル名の変更

新しいファイルの編集を開始する賢い方法は、必要なもののほとんどが含まれている既存のファイルを使用することです。たとえば、ファイルを移動するための新しいプログラムの作成を開始するとします。ファイルのコピーを行うプログラムが既にあることがわかっているため、次のように開始します。
:edit copy.c
不要なものを削除できます。次に、ファイルを新しい名前で保存する必要があります。「:saveas」コマンドを使用できます。
:saveas move.c
Vimは、指定された名前でファイルを書き込み、そのファイルを編集します。したがって、次回「:write」を実行すると、「move.c」が書き込まれます。「copy.c」は変更されません。編集しているファイルの名前を変更したいが、ファイルを書き込みたくない場合は、次のコマンドを使用できます。
:file move.c
Vimはファイルを「未編集」としてマークします。これは、Vimがこれが編集を開始したファイルではないことを認識していることを意味します。ファイルを書き込もうとすると、次のメッセージが表示される場合があります。
E13: ファイルが存在します (上書きするには ! を使用)
これにより、別のファイルを誤って上書きしてしまうのを防ぎます。
次の章: usr_08.txt ウィンドウの分割
著作権: manual-copyright を参照 vim:tw=78:ts=8:noet:ft=help:norl
メイン
コマンド索引
クイックリファレンス