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


中斷と再開

*usr_21.txt*	For Vim バージョン 8.1.  Last change: 2019 Apr 25

		     VIM USER MANUAL - by Bram Moolenaar

				  中斷と再開

この章では、Vim と他のプログラムを竝行して使ふ方法を說明します。Vim の中から外部プログラムを實行したり、Vim を一次的に中斷することでそれを實現できます。さらに、作業狀態を記錄しておいて、後から復元する方法も說明します。

|20.1|サスペンドとレジューム
|21.2|シェルコマンドの實行
|21.3|viminfo に情報を記錄する
|21.4|セッション
|21.5|ビュー
|21.6|モードライン

サスペンドとレジューム

他の Unix プログラムと同樣に、Vim も CTRL-Z でサスペンドできます。CTRL-Z を押すと Vim が停止し、實行元のシェルに制禦が戾ります。そこで好きなだけ他のコマンドを實行できます。Vim に戾るには "fg" コマンドを使ひます。

CTRL-Z
{任意のシェルコマンドを實行}
fg

サスペンドする前とまつたく同じ狀態に戾ることができます。

CTRL-Z を押しても反應がなかつた場合は ":suspend" コマンドを使つてください。Vim をフォアグラウンドに戾すのを忘れないでください。戾さなかつた場合は編輯作業が失はれてしまひます。

この機能は Unix でのみサポートされてゐます。他のシステムでは新しいシェルが起動されるでせう。シェルのコマンドが使へることに違ひはありませんが、しかしそれは Vim を實行したシェルではなく、新しいシェルです。

GUI で實行してゐるときは實行元のシェルに戾ることはできません。CTRL-Z を押すと Vim ウィンドウが最小化されます。

シェルコマンドの實行

1 つのシェルコマンドを實行するには ":!{command}" を使ひます。例へば、ディレクトリのファイル一覽を見るには次のやうにします:

:!ls    (Unix 環境)
:!dir   (MS-DOS/MS-Windows 環境)

外部プログラムが實行されます。

コマンドの實行が終はると <Enter> キーの入力を促すプロンプトが表示されるので、コマンドの出力を確認してから通常畫面に戾つてください。

"‘!’" は他のコマンドで外部プログラムを指定するときにも使はれます。次のコマンドで指定できます:

:!{program}{program} を實行する
:r !{program}{program} を實行し、その出力を讀み込む
:w !{program}{program} を實行し、標準入力にテキストを書き込む
:[range]!{program}{program} を實行し、テキストをフィルタリングする

"!{program}" に範圍指定をするとまつたく違ふ動作になるので注意してください。範圍指定がなければ單純にプログラムが實行されるだけですが、範圍指定があると、その範圍のテキストがプログラムでフィルタ處理されます。

この方法で外部プログラムを何度でも實行できますが、續けてたくさん實行したい場合はシェルを起動した方がいいでせう。次のコマンドで新しいシェルを起動できます:

:shell

CTRL-Z で Vim をサスペンドしたときの動作に似てゐますが、新しいシェルが起動されるといふ點が違ひます。

GUI を使つてゐる場合は、シェルの入出力に Vim ウィンドウが使はれます。Vim は端末エミュレータではないので、端末の機能を完全に再現することはできません。うまく動作しない場合は、’guipty’ オプションを設定してみてください。それでも動作しない場合は、新しい端末を作成し、そこでシェルを實行してください。例へば、次のやうにします:

:!xterm&

viminfo に情報を記錄する

テキストを保持してゐるレジスタ、いろんな場所に設定されたマーク、愼重に書き上げたコマンドが記錄されたコマンドライン履歷などは、Vim を終了するとすべて失はれてしまひます。ただし、それらを復元することは可能です!

viminfo ファイルには以下の情報を記錄できます:

Vim を終了すると、これらの情報が viminfo ファイルに保存されます。次に Vim を起動すると、viminfo ファイルが讀み込まれ、狀態が復元されます。

viminfo’ オプションの初期設定では、あまり多くの情報は記錄されません。たくさんの情報を記錄したい場合は、次のコマンドで設定してください:

:set viminfo=string

"string" の部分に、記錄したい情報を指定します。設定の書式は、オプション文字と引數の組み合はせをコンマ (‘,’) で區切つたリストです。

viminfo’ の設定方法を順番に見てゐきませう。まづ、' オプションを設定してみます。' オプションには、マーク (a-z) を記錄するファイルの數を指定できます。適當な數 (例へば 1000) を設定しませう。コマンドは次のやうになります:

:set viminfo='1000

f オプションには、グローバルマーク (A-Z と 0-9) を記錄するかどうかを指定できます。引數が 0 なら何も記錄されません。f オプションを指定しない、あるいは引數に 1 を指定すると、マークが保存されます。このオプションを指定すると、コマンドは次のやうになります:

:set viminfo='1000,f1

< オプションには、レジスタの行數制限を指定できます。初期設定ではすべての行が記錄されます。引數が 0 なら何も記錄されません。何千行もの (起動を遲くする以外に使ひ道のない) テキストを viminfo ファイルに記錄したくはないので、500 行に制限してみます:

:set viminfo='1000,f1,<500

他にも次のやうなオプションがあります:

:記錄するコマンドライン履歷の數
 記錄する入力行履歷の數
/記錄する檢索履歷の數
r指定されたリムーバブルメディア上のファイルのマークを記錄しない (複數指定可)
!名前がすべて大文字のグローバル變數を記錄する
h起動直後に ’hlsearch’ による强調表示をしない
%バッファリスト (Vim をファイル引數なしで起動したときのみ復元されます)
cテキストを ’encoding’ で變換する
nviminfo ファイルの名前 (このオプションは末尾に指定する必要があります)

詳細は ’viminfo’ と |viminfo-file| を參照してください。

Vim を複數起動した場合は、最後に終了した Vim の狀態が記錄されます。それより前に終了した Vim が記錄した情報は失はれます。記錄できるのは 1 つの狀態だけです。

前囘の場所に戾る

ファイルの編輯中に終業時閒が來てしまひました。明日から休暇です。Vim を終了し、家路につきませう。仕事の事はすべて忘れて休暇を樂しんでください。數週閒後、仕事に戾つたら、Vim を立ち上げて、こう入力します:

'0

すると、最後に編輯してゐた場所に戾れます。これで仕事が續けられますね。

Vim を終了するたびにマークが設定されます。最新のマークは ’0 です。マークは ’0 から ’1 へ、’1 から ’2 へ、しだいにずれていき、’9 まで記錄されます。

’0 から ’9 までのマークがどこを指してゐるのかは |:marks| コマンドで確認できます。

最近開いたファイルに戾る

最近開いたファイルを再び開きたい場合はすこし面倒です (前囘の Vim 終了時に開いてゐたファイルではなくてまさに最近開いたファイルのこと)。次のコマンドでファイルの一覽を表示できます:

:oldfiles
1: ~/.viminfo
2: ~/text/resume.txt
3: /tmp/draft

2 番目のファイル ("2:" の行) を開きたい場合は次のやうに入力します:

:e #<2

":e" 以外にも、ファイル名を引數に取るコマンドならどれを使つても構ひません。"#<2" といふ表記は "%" (カレントファイル) や "#" (オルタネートファイル) と同じ要領で使用できます。例へば次のやうにすると、3 番目のファイルを分割ウィンドウで開くことができます:

:split #<3

單にファイルを開きたい場合には #<123 といふ指定は少し面倒かもしれませんね。もつと簡單な方法があります:

:browse oldfiles
1: ~/.viminfo
2: ~/text/resume.txt
3: /tmp/draft
-- More --

|:oldfiles| と同じやうにファイル一覽が表示されます。"resume.txt" を開きたい場合にはまづ "q" を押して表示を止めます。プロンプトが表示されるので:

番號と <Enter> を入力してください (空でキャンセル):

"2" を入力して <Enter> を押し、2 番目のファイルを開きます。

詳細は |:oldfiles|, |v:oldfiles|, |c_#<| を參照してください。

他の Vim に情報を移動する

":wviminfo" コマンドと ":rviminfo" コマンドを使ふと、Vim の實行中でも viminfo ファイルの保存と復元ができます。例へば、他の Vim からレジスタの內容をコピーすることができます。片方の Vim で次のやうにして保存し:

:wviminfo! ~/tmp/viminfo

もう一方の Vim でそれを讀み込みます:

:rviminfo! ~/tmp/viminfo

言ふまでもなく、"w" は "write"、"r" は "read" の意味です。 既存のファイルに上書きするときは、":wviminfo" に ‘!’ を付けてください。‘!’ を指定しなかつた場合は、現在の情報と既存のファイルの情報がマージされます。

":rviminfo" に ‘!’ を付けると、ファイルのすべての情報が使はれます。つまり、現在の情報が上書きされます。‘!’ を指定しなかつた場合は、まだ設定されてゐない情報だけが使はれます。

これらのコマンドを使へば、狀態を保存しておいて後で再利用することもできます。例へば、viminfo 專用のディレクトリに狀態を保存しておき、目的ごとに使ひ分けることも可能です。

セッション

作業が終はらない內に 1 日が終はつてしまつた場合、その日の作業を中斷し、次の日に同じ狀態で作業を再開できたら便利ですよね。編輯セッションを保存しておけば、作業狀態を復元することができます。

セッションには、作業狀態に關するすべての情報が保存されます。例へば、ファイルリスト、ウィンドウレイアウト、グローバル變數、オプションの設定などです。(正確には、下記で說明されてゐる ’sessionoptions’ に指定された項目が保存されます。)

次のコマンドでセッションファイルを作成できます:

:mksession vimbook.vim

セッションを復元するには、次のコマンドを使ひます:

:source vimbook.vim

Vim の起動と同時にセッションを再開するには、次のやうにして Vim を起動します:

vim -S vimbook.vim

Vim が起動し、指定したファイルが讀み込まれます。’S’ はセッション (Session) の意味です (實際には、-S には Vim script ならなんでも指定できるので、"source" を意味してゐるとも言へます)。

以前に開いてゐたウィンドウが、同じ場所、同じ大きさで作成されます。マップやオプションの設定も復元されます。 復元される情報は ’sessionoptions’ オプションで設定できます。初期設定は "‘blank,buffers,curdir,folds,help,options,tabpages,winsize,terminal’" です。

blank空のウィンドウ
buffersすべてのバッファ (ウィンドウに表示されてゐないバッファも含む)
curdirカレントディレクトリ
folds折り疊み (手動で設定したものも含む)
helpヘルプウィンドウ
optionsすべてのオプションとマップ
tabpagesすべてのタブページ
winsizeウィンドウの大きさ
terminal端末ウィンドウを含む

好きなやうに設定してください。例へば、Vim ウィンドウの大きさも復元したい場合は、次のやうにします:

:set sessionoptions+=resize

こつちにもセッション、あつちにもセッション

セッションは、複數のプロジェクトで仕事をするときなどに使はれます。例へば、"~/.vim" にセッションファイルを保存するとします。そして、"secret" プロジェクトで作業してゐる最中に、"boring" プロジェクトで作業する必要がでてきました:

:wall
:mksession! ~/.vim/secret.vim
:source ~/.vim/boring.vim

最初に、":wall" ですべてのファイルを保存します。次に、現在のセッションを ":mksession!" で保存します。以前のセッション情報が上書きされました。後で secret セッションをロードすると今現在の狀態から作業を再開できます。最後に、"boring" セッションをロードします。

ヘルプを開いたり、ウィンドウを分割したり閉ぢたりして、ウィンドウレイアウトが亂れてしまつた場合、セッションをロードし直せば元に戾せます:

:source ~/.vim/boring.vim

每囘新しいセッションを保存するか、あるいは最初に保存したセッションを使ひ續けるかは自由に選擇できます。

セッションには他の使ひ方もあります。例へば、好みのウィンドウレイアウトをセッションに保存しておけば、いつでも好きなときにそのレイアウトに戾ることができます。

例へば、このやうなレイアウトは使ひやすいでせう:

+----------------------------------------+
|                  VIM - main help file  |
|                                        |
|Move around:  Use the cursor keys, or "h|
|help.txt================================|
|explorer   |                            |
|dir        |~                           |
|dir        |~                           |
|file       |~                           |
|file       |~                           |
|file       |~                           |
|file       |~                           |
|~/=========|[No File]===================|
|                                        |
+----------------------------------------+

ヘルプウィンドウが上部に表示され、いつでも參照できます。左端の縱長のウィンドウはファイルエクスプローラーといふ Vim のプラグインです。ディレクトリのファイル一覽を表示し、その中からファイルを選擇して開くことができます。詳しくは次章で說明します。

このやうなウィンドウを作るには、Vim を起動してから次のコマンドを實行します:

:help
CTRL-W w
:vertical split ~/

ウィンドウの大きさを調節し、セッションを保存してください:

:mksession ~/.vim/mine.vim

これで、同じレイアウトで Vim を起動できます:

vim -S ~/.vim/mine.vim

Hint: エクスプローラーでファイルを選擇し、空のウィンドウでファイルを開くには、ファイル名の場所にカーソルを移動して "O" を押します。マウスのダブルクリックでも同じ動作になります。

UNIX と MS-WINDOWS

MS-Windows と Unix を兩方使はなければならない人もゐるでせう。そのやうな人は、’sessionoptions’ に "slash" と "unix" を追加した方がいいかもしれません。その設定で保存されたセッションファイルはどちらのシステムでも使へます。次のコマンドを vimrc ファイルに追加してください:

:set sessionoptions+=unix,slash

セッションファイルが Unix 形式で保存されるやうになります。MS-Windows の Vim は Unix 形式のセッションファイルを讀み書きできますが、Unix の Vim は MS-Windows 形式のセッションファイルを讀み込むことができません。同樣に、MS-Windows の Vim は ‘/’ で區切られたファイル名を處理できますが、Unix の Vim は ‘\’ を處理できません。

セッション と viminfo

セッションファイルにはたくさんの情報が保存されますが、マークやレジスタ、コマンドライン履歷などは保存されません。それらの情報を保存するには viminfo を使つてください。

セッションと viminfo は分けて使ふことが多いと思ひます。他のセッションに切り換へてもコマンドライン履歷をそのまま殘すことができますし、テキストをレジスタにヤンクし、他のセッションでペーストするといふこともできます。

セッションと viminfo を同時に使ひたい場合は、自分で保存してください。例:

:mksession! ~/.vim/secret.vim
:wviminfo! ~/.vim/secret.viminfo

復元するには次のやうにします:

:source ~/.vim/secret.vim
:rviminfo! ~/.vim/secret.viminfo

ビュー

セッションは Vim 全體の表示設定を扱ひます。1 つのウィンドウに關する設定だけ保存したい場合は、ビューを使ひます。

ビューは、ファイルごとに表示設定を變更したい場合に使ひます。例へば、’number’ を設定して行番號を表示し、いくつかの折り疊みを定義した場合に、その情報を保存して、後で復元することができます。實際のところ、セッションには、各ウィンドウのビューが保存されてゐるのです。

ビューの使ひ方は 2 つあります。1 つは、ビューファイルの名前を Vim に決めさせる方法です。保存したビューは、同じ名前のファイルを開いてゐるときに復元できます。カレントウィンドウのビューを保存するには、次のコマンドを使ひます:

:mkview

ビューを保存する場所は自動的に決定されます。後で同じファイルを開いたときに、次のコマンドでビューを復元できます:

:loadview

簡單ですね。

さて、同じファイルを違ふ設定で表示してみませう。’number’ オプションをオフに設定、あるいは折り疊みをすべて開き、ウィンドウの表示を變更してみます。そして、次のコマンドでビューを保存します:

:mkview 1

當然、次のやうにして復元します:

:loadview 1

これで、":loadview" と ":loadview 1" を使つて、同じファイルの 2 つのビューを切り替へられるやうになりました。

ファイル 1 つにつき、番號なしのビューと、1 から 9 までの 9 個のビュー、合はせて 10 個のビューが使へます。

名前付きのビュー

ビューのもう 1 つの使用方法は、指定したファイルにビューを保存する方法です。この方法なら、他のファイルを開いてゐてもビューを復元できます。ビューを復元すると、ビューに關聯付けられたファイルが開くので、編輯するファイルを素早く切り替へる方法としても使へます。

例へば、カレントファイルのビューを保存するには、次のやうにします:

:mkview ~/.vim/main.vim

次のコマンドで復元できます:

:source ~/.vim/main.vim

モードライン

ファイル固有の設定を、ファイルを開くたびに設定しても構ひませんが、何度も何度も同じコマンドを入力するのはうんざりですよね。セッションやビューでは同じ設定を他人と共有できません。

そのやうな場合にはモードラインを使ひます。モードラインとは、ファイル固有の設定をファイル內に記述するための仕組みです。

例へば、C 言語ファイルのインデントをスペース 4 個分に設定したい場合に使ひます。それには ’shiftwidth’ オプションを 4 に設定する必要があるので、モードラインは次のやうになります:

/* vim:set shiftwidth=4: */

この行を、ファイルの先頭または末尾から五行以內のどこかに書いてください。そのファイルを開くと ’shiftwidth’ が自動的に設定されます。他のファイルを開くと、初期設定の 8 に戾ります。

モードラインをファイルヘッダーに書くのが適當な場合はファイルの先頭にモードラインを書きます。テキストファイルなど、モードラインがその內容を邪魔してしまふやうな場合は末尾に書きます。

modelines’ オプションでモードラインの有效範圍を設定できます。ファイルの先頭または末尾からの行數で指定してください。例へば、10 行にしたい場合は次のやうに設定します:

:set modelines=10

モードライン機能を無效にするには ’modeline’ オプションをオフに設定します。Unix の root や MS-Windows の Administrator として作業する場合や、信用できないファイルを開く場合に設定してください:

:set nomodeline

モードラインは次の書式で書きます:

any-text vim:set {option}={value} ... : any-text

モードラインの前後、"any-text" の部分はどんな文字列でも構ひません。例へば上述の例のやうに、‘/*’ と ‘*/’ で圍んでコメントにすることができます。

Vim は " vim:" といふ部分を見てモードラインを認識します。直前に空白のある "vim"、または行頭の "vim" だけが認識されます。つまり、例へば "gvim:" は機能しません。

2 つのコロン (:) の閒には ":set" コマンドを記述します。これは通常の ":set" コマンドと同じです。ただし、コロンの前にバックスラッシュ (‘\’) を置く必要があります (バックスラッシュがない場合はそれがモードラインの終端だと認識されます)。

例:

// vim:set textwidth=72 dir=c\:\tmp:  use c:\tmp here

最初のコロンにはバックスラッシュが前置されてゐるので、それは ":set" コマンドの一部です。2 つ目のコロン以降は無視されるので、說明を書くことができます。

詳細は |modeline| を參照してください。


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