Next: , Previous: , Up: 目次   [Index]


複數のファイルを開く

*usr_07.txt*	For Vim バージョン 8.1.  Last change: 2017 Sep 18

		     VIM USER MANUAL - by Bram Moolenaar

			  複數のファイルを開く

どんなにファイルが多くても心配はいりません。Vim を複數起動することなしに、それらのファイルを編輯できます。作業するファイルのリストを定義して、他のファイルにジャンプしたりテキストをコピーしたりできます。

|07.1|他のファイルを開く
|07.2|ファイルのリスト
|07.3|他のファイルにジャンプする
|07.4|バックアップファイル
|07.5|他のファイルにテキストをコピーする
|07.6|讀み込み專用モード
|07.7|ファイル名の變更

他のファイルを開く

いままでは、ファイルを開くごとに Vim を起動しなければなりませんでしたが、もつと簡單な方法があります。次のコマンドを使つてください:

:edit foo.txt

ファイル名は "foo.txt" に限らず何でも使へます。Vim は現在のファイルを閉ぢて、指定されたファイルを開きます。ファイルの變更が保存されてゐない場合は、エラーメッセージが表示され、新しいファイルは開かれません。

E37: 最後の變更が保存されてゐません (! で變更を破毀)

Note:
エラーメッセージの先頭には エラーID が表示されます。エラーの意味や原因がわからない場合は、この ID をヘルプで引いてください。上記エラーの場合は、このやうにします:

:help E37

このエラーを囘避するには、次のコマンドでファイルを保存してください:

:write

あるいは、變更を破毀して新しいファイルを開くこともできます。(‘!’) 文字を使つてください:

:edit! foo.txt

ファイルの變更を保存せずに他のファイルを開きたい場合は、ファイルを隱す方法もあります:

:hide edit foo.txt

ファイルの變更はまだ破毀されませんが、ファイルは畫面外に隱れてしまひます。詳しくは |22.4| バッファリスト で說明します。

ファイルのリスト

Vim を起動するときに、複數のファイルを指定することができます。例:

vim one.c two.c three.c

このコマンドは Vim を起動し、3 つのファイルを開くやうに指示してゐます。Vim は 1 つ目のファイル (one.c) だけを表示します。そのファイルの編輯が終はり、次のファイル (two.c) を編輯したい場合はこのコマンドを使ひます:

:next

ファイルの變更が保存されてゐない場合は、エラーメッセージが表示され、":next" コマンドは中斷されます。前節で述べた ":edit" の場合と同じです。變更を破毀するには次のコマンドを使ひます。

:next!

しかしほとんどの場合、變更を保存してから次のファイルを開くと思ひます。それには專用のコマンドが用意されてゐます。

:wnext

これは次の 2 つのコマンドを使ふのと同じ結果となります。

:write
:next

私はドコにゐるの?

今編輯してゐるのが引數リスト中のどのファイルなのかは、ウィンドウタイトルを見ればわかります。そこに "(2 of 3)" のやうな表示があります。この場合は全部で 3 つのファイルがあり、今は 2 つ目を編輯してゐるといふ意味です。次のコマンドでファイルの一覽を表示できます:

:args

これは "arguments" の省略形です。結果は次のやうに表示されます。

one.c [two.c] three.c

Vim を起動したときに指定したファイルが表示されます。編輯中のファイル (ここでは "two.c") は ‘[]’ 記號で圍んで表示されます。

他のファイルへの移動

これはファイルを 1 つ戾るコマンドです。

:previous

":next" コマンドと同じ動作ですが、移動する方向が違ひます。このコマンドにも、ファイル保存してから移動する專用のコマンドがあります。

:wprevious

一覽の最後のファイルに移動するには次のコマンドを使ひます。

:last

最初のファイルに戾るには次のコマンドです。

:first

":wlast" とか ":wfirst" みたいなコマンドはありません。

":next" と ":previous" にはカウンタを指定できます。例へば、2 つ先のファイルに進むにはこのやうにします。

:2next

自動保存

いろんなファイルを編輯して回るときには、":write" で保存するのを忘れないでください。變更を保存せずに移動しようとすると、エラーメッセージが表示されます。移動するときはいつでも變更を保存したいと思つた場合は、次のやうに設定してください。變更が自動的に保存されるやうになります。

:set autowrite

保存して欲しくないファイルを編輯するときは、機能をオフに設定してください。

:set noautowrite

他のファイルリストで編輯する

Vim を再起動しなくても、ファイルリストを變更できます。例へば、他の 3 つのファイルを編輯するには次のやうにします。

:args five.c six.c seven.h

シェルと同じやうにワイルドカードを使ふこともできます。

:args *.txt

リストの最初のファイルがまず開かれます。ここでも、現在のファイルの變更をまだ保存してゐない場合は、ファイルを保存するか、":args!" (‘!’ が付いてゐます) を使つて變更を破毀する必要があります。

最後のファイルまで編輯した?

ファイルリストが使はれると、Vim は、すべてのファイルが編輯對象だと判斷します。閒違つて Vim を終了してしまふことがないやうに、すべてのファイルをまだ開いてゐないのに終了しようとした場合は、エラーメッセージが表示されます:

E173: 編輯すべきファイルがあと 46 個あります。

本當に終了してよければ、もう一度終了コマンドを實行してください。今度は終了できます (閒に他のコマンドを挾まないでください)。

他のファイルにジャンプする

CTRL-^ を使ふと 2 つのファイル閒を素早く移動できます(日本語キーボードなら ^ は ’-’ キーの右側 (「」キー) にあります)。例:

: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" のやうなコマンドだけが現在地を變更します。

直前に編輯していたファイルのことをオルタネートファイル (alternate file) と言ひます。Vim の起動直後はオルタネートファイルがまだ無いため CTRL-^ は動作しません。

定義濟マーク

他のファイルにジャンプすると、2 つの定義濟マークが使へるやうになります。これは非常に便利です。

`"

このコマンドを實行すると、以前にファイルを開いてゐたときにゐた場所にカーソルが移動します。もう 1 つは、最後に變更を加へた場所に設定されたマークです。

`.

例へば、"one.txt" を編輯してゐるとします。ファイルの眞ん中あたりで "x" を使つて文字を削除しました。そして、"G" を使つて最後の行に移動し、":w" でファイルを保存します。他のファイルをいくつか編輯してから、":edit one.txt" で "one.txt" に戾つてきました。ここで、`" を實行すると、ファイルの最後の行にカーソルが移動します。`. を實行すると、文字を削除した場所に移動します。ファイル內をいろいろと移動した後でも、`"`. は同じ場所を覺えてゐます。少なくとも、他の變更を加へたり、別のファイルに移動したりするまでは。

ファイルマーク

4 章 (|04.1|) では "mx" でマークを付け、"`x" でその場所にジャンプする方法を說明しました。そのマークはファイルの中だけで使へます。別のファイルを開いて、それに同じマークを付けても、マークはそのファイルに固有のものとなります。つまり各ファイルはそれぞれのマークを持つてゐて、ファイル內に閉ぢてゐるといふことです。

いままでは、マークに小文字を使つてきましたが、大文字のマークも使へます。大文字のマークはグローバルで、どのファイルからでも使へます。例へば "foo.txt" といふファイルを開き、"50%" コマンドでファイルの眞ん中にジャンプして下がり、その場所に F といふマークを付けたとします:

50%mF

次に "bar.txt" を開き、最終行にマーク B を付けます:

GmB

さて、ここで "'F" コマンドを使ふと、いきなり foo.txt の眞ん中にジャンプできます。さらに、他のファイルを開いてから "'B" を入力すると、bar.txt の行末に移動できます。

他の場所を設定するまで、ファイルマークは同じ場所を記憶してゐます。そのため、一度マークを付ければ、何時閒も編輯を行つてからでもそのマークに戾つて來ることができます。

マークの文字とマークを付けた場所が聯想できるやうな單純なルールを決めておくとよいでせう。例へば、ヘッダーファイルは H、make ファイルは M、C 言語のソースには C といつた具合です。

マークが置いてある場所を確認するには、":marks" コマンドにそのマークを指定してください。

:marks M

マークを複數指定しても構ひません。

:marks MCP

マークを使はなくても、CTRL-OCTRL-I を使へば、古い場所と新しい場所の閒をジャンプできることをお忘れなく。

バックアップファイル

初期設定ではバックアップファイルは作成されません。バックアップファイルが必要なら、次のコマンドを實行してください:

:set backup

バックアップファイルの名前は、ファイル名の後ろに ~ を加へた名前になります。例へば、ファイル名が data.txt なら、バックアップファイルは data.txt~ です。

~’ 以外の文字を使ひたい場合は、次のやうに設定してください:

:set backupext=.bak

これで、バックアップファイルの名前が data.txt.bak になります。

もう 1 つのオプション ’backupdir’ についても說明しませう。これはバックアップファイルを保存するディレクトリを指定するオプションです。初期設定ではバックアップは元ファイルと同じディレクトリに保存されます。たいていの場合はこれで問題ないはずです。

Note:
writebackup’ がオンの場合、’backup’ がオフでもバックアップファイルは作成されますが、ファイルの保存が成功すると、そのバックアップファイルはすぐに削除されます。これは、ファイルを保存できなかつたときに、オリジナルファイルが失はれないやうにするための機能です。(失敗の原因は、例へば、ディスクがいつぱいになつたといふのが一番ありがちな理由です。雷にやられるといふのも可能性は低いですがありうることです)。

オリジナルファイルを殘す

ソースファイルを編輯してゐると、變更を加へる前のファイルを殘しておきたいときがあります。しかし、バックアップファイルはファイルを保存するたびに上書きされるので、直前のバックアップしか殘らず、最初のファイルはなくなつてしまひます。

オリジナルのファイルを殘しておきたい場合は、’patchmode’ オプションを設定してください。バックアップファイルを最初に作成するときに使ふ擴張子を指定します。次のやうに設定してください:

:set patchmode=.orig

例へば、はじめて data.txt を開いたときに、變更を加へ、保存しようとすると、變更前のファイルが "data.txt.orig" といふ名前でコピーされます。

その後、ファイルを變更しても、既に "data.txt.orig" があるので、上書きはされません。この場合もバックアップファイルは "data.txt~" (もしくは ’backupext’ で指定した名前) で作成されます。

patchmode’ が空のまま (初期設定) だと、オリジナルファイルは殘りません。

他のファイルにテキストをコピーする

ここではファイルから別のファイルにテキストをコピーする方法を說明します。簡單な例で始めませう。コピーしたいテキストを含んでゐるファイルを開きます。テキストの先頭にカーソルを移動して "v" を押すとビジュアルモードが開始します。テキストの末尾までカーソルを移動して "y" を押します。これでテキストがヤンク (コピー)されました。

例へば、上の段落をコピーするには、次のやうにします。

:edit thisfile
/ここでは
vjjjj$y

次に、このテキストをプット (ペースト) したいファイルを開きます。テキストをプットしたい場所にカーソルを動かし、"p" コマンドでプットします。

:edit otherfile
/どこか
p

當然ながら、テキストのヤンクには他にもいろんなコマンドが使へます。例へば、"V" でビジュアルモードを開始すると行單位で選擇できますし、CTRL-V で矩形選擇もできます。"Y" で一行をヤンクしたり、"yaw" で單語をヤンク (yank-a-word) するなど、いろいろできます。

"p" コマンドはカーソルの後にテキストをプットします。カーソルの前にプットするには "P" を使ひます。Vim はヤンクしたときの選擇單位 (行選擇や矩形選擇) を覺えてゐて、同じ單位でプットします。

レジスタを使ふ

あるファイルから別のファイルに數箇所のテキストをコピーしたいとき、何度も何度もファイルを切り換へると時閒がかかります。テキストをレジスタにコピーして手閒を省きませう。

レジスタとは、Vim がテキストを保持する場所です。ここでは ‘a’ から ‘z’ までの名前が付いたレジスタを使ひます (レジスタは他にもあります)。では、テキストをレジスタ ‘f’ (f は first のつもり) にヤンクしてみませう。

"fyas

"yas" コマンドで文をヤンクしてゐます。"f はテキストをレジスタ ‘f’ に入れるための指定です。この指定はヤンクコマンドの直前に指定します。

さらに 3 行をレジスタ ‘l’ (l は line のつもり) にヤンクしてみませう。

"l3Y

カウンタ (回數指定) は "l の直前に指定することもできます。テキストのブロック(矩形選擇) をレジスタ ‘b’ (b は block のつもり) にヤンクする場合は次のやうにします。

CTRL-Vjjww"by

レジスタ指定 "b を "y" コマンドの直前で指定してゐる點に注意してください。これは重要なことです。これを "w" コマンドより前に置いてしまふとうまく動きません。

さて、‘f’、‘l’、‘b’ の 3 つのレジスタにテキストをヤンクできました。他のファイルを開いて、テキストを插入したい場所にカーソルを移動し、レジスタの內容をプットしませう。

"fp

ヤンクの場合と同じく、レジスタ指定 "f は "p" コマンドより前に指定します。どのレジスタからプットしても構ひません。他のテキストをヤンクし直さない限り、レジスタの內容は變はらないので、同じレジスタを何度でも好きなだけプットできます。

テキストを削除するときにも、レジスタを指定できます。テキストを何ヶ所かに移動するときなどに使つてください。例へば、單語を削除 (delete-a-word) してその內容をレジスタ ‘w’ に入れるには次のやうにします。

"wdaw

何度も言ふやうですが、レジスタ指定は削除コマンド "d" の前に置いてください。

ファイルに追記する

文章を 1 つのファイルにまとめたい場合は、次のコマンドを使ひます。

:write >> logfile

カレントファイルの內容が "logfile" の末尾に追記されます。テキストをコピーして、"logfile" を開き、テキストをプットするより簡單です。作業を 2 手節約できます。ただし、ファイルの末尾への追加しかできません。

ファイルの一部だけ追記したい場合は、ビジュアルモードでテキストを選擇してから ":write" を實行してください。テキストを選擇する方法は他にもありますが、10 章で說明します。

讀み込み專用モード

ファイルを變更する氣はなく、ただファイルの內容を見たいだけのときがあります。普通に開くと、うつかり ":w" を實行して元のファイルを上書きしてしまふ危險があります。さういふときは、讀み込み專用モードでファイルを開いてください。

Vim を讀み込み專用モードで起動するには、次のコマンドを使ひます。

vim -R file

Unix なら、次のコマンドも同じ意味になります。

view file

"file" が讀み込み專用モードで開きます。":w" をしようとしても、エラーメッセージが表示され保存はされません。

ファイルに變更を加へようとすると、次のやうな警告が表示されます。

W10: 警告:讀込專用ファイルを變更します

警告は出ますが、變更は可能です。これは、例へばファイルを讀みやすくフォーマットしたりするためです。

讀み込み專用モードであることを忘れて、ファイルを修正してしまつたやうなときは、write コマンドに ! を付けて强制保存してください。

完全にファイルの變更を禁止したい場合は、次のやうにしてください。

vim -M file

これで、內容を變更しようとしてもエラーになります。例へば、ヘルプファイルはこのモードで表示されてゐます。變更しようとすると、次のエラーメッセージが表示されます。

E21: ’modifiable’ がオフなので、變更できません

-M 引數を使へば Vim を閱覽モードに設定できますが、これは自主規制みたいなもので、次のコマンドを使へば制限はなくなつてしまひます。

:set modifiable
:set write

ファイル名の變更

新しいファイルを作成するときに、目的に近いファイルがあるなら、それを利用するのが效率的です。例へば、ファイルを移動するプログラムを作りたいとしませう。ファイルをコピーするプログラムがすでにあるので、それを流用することにしました。

:edit copy.c

新しいプログラムに必要ない部分は削除してしまひませう。次に、このファイルを新しい名前で保存する必要があります。そのためのコマンドが ":saveas" です。

:saveas move.c

指定した名前でファイルが保存され、そのファイルが開かれます。そのため、次に ":write" したときは "move.c" に保存されます。"copy.c" は變更されません。

ファイルを保存せずに、ファイルの名前だけ變更したい場合は、次のコマンドを使ひます。

:file move.c

そのファイル (move.c) は、實際のファイルではないので、"開いてゐない" (not edited) 扱ひになります。ファイルを保存しようとすると、次のメッセージが表示されることがあります。

E13: ファイルが存在します (! を追加で上書)

これは、實際のファイルを閒違つて上書きしてしまはないやうにするためです。


Next: , Previous: , Up: 目次   [Index]