vim-jp / vimdoc-ja / usr_07

usr_07 - Vimドキュメント

メインヘルプファイルに戻る
usr_07.txt    For Vim バージョン 8.2.  Last change: 2020 Mar 23

                     VIM USER MANUAL - by 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

==============================================================================
07.1  他のファイルを開く

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

        :edit foo.txt

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

        E37: 最後の変更が保存されていません (! で変更を破棄)

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

                :help E37

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

        :write

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

        :edit! foo.txt

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

        :hide edit foo.txt

ファイルの変更はまだ破棄されませんが、ファイルは画面外に隠れてしまいます。詳し
くは22.4バッファリスト で説明します。

==============================================================================
07.2  ファイルのリスト

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

        vim one.c two.c three.c

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

        :next

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

        :next!

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

        :wnext

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

        :write
        :next


私はドコにいるの?
------------------

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

        :args

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

        one.c [two.c] three.c

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


他のファイルへの移動
--------------------

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

        :previous

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

        :wprevious

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

        :last

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

        :first

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

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

        :2next


自動保存
--------

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

        :set autowrite

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

        :set noautowrite


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

Vim を再起動しなくても、ファイルリストを変更できます。例えば、他の三つのファイ
ルを編集するには次のようにします。

        :args five.c six.c seven.h

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

        :args *.txt

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


最後のファイルまで編集した?
----------------------------
                                                        arglist-quit
ファイルリストが使われると、Vim は、すべてのファイルが編集対象だと判断します。
間違って Vim を終了してしまうことがないように、すべてのファイルをまだ開いてい
ないのに終了しようとした場合は、エラーメッセージが表示されます:

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

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

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

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

        :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-^ は動作しませ
ん。


定義済マーク
------------

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

        `"

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

        `.

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


ファイルマーク
--------------

03.10 節では "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-O と CTRL-I を使えば、古い場所と新しい場所の間を
ジャンプできることをお忘れなく。

==============================================================================
07.4  バックアップファイル

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

        :set backup

バックアップファイルの名前は、ファイル名の後ろに ~ を加えた名前になります。
例えば、ファイル名が data.txt なら、バックアップファイルは data.txt~ です。
 ~ 以外の文字を使いたい場合は、次のように設定してください:

        :set backupext=.bak

これで、バックアップファイルの名前が data.txt.bak になります。
もう一つのオプション 'backupdir' についても説明しましょう。これはバックアップ
ファイルを保存するディレクトリを指定するオプションです。初期設定ではバックアッ
プは元ファイルと同じディレクトリに保存されます。たいていの場合はこれで問題ない
はずです。

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


オリジナルファイルを残す
------------------------

ソースファイルを編集していると、変更を加える前のファイルを残しておきたいときが
あります。しかし、バックアップファイルはファイルを保存するたびに上書きされるの
で、直前のバックアップしか残らず、最初のファイルはなくなってしまいます。
オリジナルのファイルを残しておきたい場合は、'patchmode' オプションを設定してく
ださい。バックアップファイルを最初に作成するときに使う拡張子を指定します。次の
ように設定してください:

        :set patchmode=.orig

例えば、はじめて data.txt を開いたときに、変更を加え、保存しようとすると、変更
前のファイルが "data.txt.orig" という名前でコピーされます。
その後、ファイルを変更しても、既に "data.txt.orig" があるので、上書きはされま
せん。この場合もバックアップファイルは "data.txt~" (もしくは 'backupext' で指
定した名前) で作成されます。
'patchmode' が空のまま (初期設定) だと、オリジナルファイルは残りません。

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

ここではファイルから別のファイルにテキストをコピーする方法を説明します。簡単な
例で始めましょう。コピーしたいテキストを含んでいるファイルを開きます。テキスト
の先頭にカーソルを移動して "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 に入れるための
指定です。この指定はヤンクコマンドの直前に指定します。
さらに三行をレジスタ l (lはlineのつもり) にヤンクしてみましょう。

        "l3Y

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

        CTRL-Vjjww"by

レジスタ指定 "b を "y" コマンドの直前で指定している点に注意してください。これ
は重要なことです。これを "w" コマンドより前に置いてしまうとうまく動きません。
さて、f、l、b の三つのレジスタにテキストをヤンクできました。他のファイルを開い
て、テキストを挿入したい場所にカーソルを移動し、レジスタの内容をプットしましょ
う。

        "fp

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

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

        "wdaw

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


ファイルに追記する
------------------

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

        :write >> logfile

カレントファイルの内容が "logfile" の末尾に追記されます。テキストをコピーして、
"logfile" を開き、テキストをプットするより簡単です。作業を 2 手節約できます。
ただし、ファイルの末尾への追加しかできません。
ファイルの一部だけ追記したい場合は、ビジュアルモードでテキストを選択してから
":write" を実行してください。テキストを選択する方法は他にもありますが、10 章で
説明します。

==============================================================================
07.6  読み込み専用モード

ファイルを変更する気はなく、ただファイルの内容を見たいだけのときがあります。普
通に開くと、うっかり ":w" を実行して元のファイルを上書きしてしまう危険がありま
す。そういうときは、読み込み専用モードでファイルを開いてください。
Vim を読み込み専用モードで起動するには、次のコマンドを使います。

        vim -R file

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

        view file

"file" が読み込み専用モードで開きます。":w" をしようとしても、エラーメッセージ
が表示され保存はされません。
ファイルに変更を加えようとすると、次のような警告が表示されます。

        W10: 警告: 読込専用ファイルを変更します

警告は出ますが、変更は可能です。これは、例えばファイルを読みやすくフォーマット
したりするためです。
読み込み専用モードであることを忘れて、ファイルを修正してしまったようなときは、
write コマンドに ! を付けて強制保存してください。

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

        vim -M file

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

        E21: 'modifiable'がオフなので、変更できません

-M 引数を使えば Vim を閲覧モードに設定できますが、これは自主規制みたいなもの
で、次のコマンドを使えば制限はなくなってしまいます。

        :set modifiable
        :set write

==============================================================================
07.7  ファイル名の変更

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

        :edit copy.c

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

        :saveas move.c

指定した名前でファイルが保存され、そのファイルが開かれます。そのため、次に
":write" したときは "move.c" に保存されます。"copy.c" は変更されません。ファイ
ルを保存せずに、ファイルの名前だけ変更したい場合は、次のコマンドを使います。

        :file move.c

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

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

これは、実際のファイルを間違って上書きしてしまわないようにするためです。

==============================================================================

次章: usr_08.txt  ウィンドウの分割

Copyright: see manual-copyright  vim:tw=78:ts=8:noet:ft=help:norl:
関連キーワード:  usr, コマンド, 変更, 保存, テキスト, マーク, Vim, 編集, 移動, レジスタ