starting.txt For Vim バージョン 8.2. Last change: 2021 May 08
VIMリファレンスマニュアル by Bram Moolenaar
Vimの起動 starting
1. Vimの起動引数 vim-arguments
2. Amiga版のVim starting-amiga
3. eVimについて evim-keys
4. 初期化 initialization
5. $VIM と $VIMRUNTIME $VIM
6. サスペンド suspend
7. 終了 exiting
8. 設定の保存 save-settings
9. ビューとセッション views-sessions
10. viminfo ファイル viminfo-file
==============================================================================
1. Vimの起動引数 vim-arguments
たいていは1つのファイルを編集するために次のようなコマンドでVimを起動する
vim filename -vim
より一般的に言えば、Vimは次の書式で起動することができる:
vim [option | filename] ..
オプション引数とファイル引数は混在でき、幾つでも与える事ができる。しかし引数を
取るオプションには注意が必要である。
さまざまなViのバージョンとの互換性に付いてはcmdline-argumentsを参照。
正確には、以下の5つの項目から1つを選んで編集が開始される:
-file ---
filename 1つ以上のファイル名が与えられた場合。まずは最初の1つが編集ファ
イルとしてバッファに読み込まれる。カーソルはそのバッファの1行
目に置かれる。
'-' で始まるファイル名を指定するには、オプションと区別するため
に、引数に "--" を置く。例:
のオプションや引数 "+command" は使用することができない。
MS-Windows におけるクォートの動作については win32-quotes を
参照。
--
- この引数はExモードで起動するかどうかで意味が異なる。
ノーマルモードで起動する場合:
通常であれば標準入力から読み込まれるが、この場合代わりに標準エ
ラー出力から読み込まれる。例:
バッファに「変更(modified)」のマークが付けられるので、終了しよ
うとする時にテキストの保存するように指摘される。それが好ましく
ないなら、vimrc に以下の行を加える:
Exモードで起動する場合:
-t -tag
-t {tag} タグを開く。{tag}がtagsファイルから検索され、関連づけられた
ファイルが現在のファイルとされ、関連づけられたコマンドが実行さ
れる。大抵これはCプログラムを編集するときに使用され、"tag" は
関数名である事が多い。それにより、その関数を含むファイルが自動
的に開かれ、カーソルがその関数の定義位置に設定される(tagsを
参照)。
-q -qf
-q [errorfile] quickfixモードで起動。 [errorfile]に指定したファイルが読み込ま
れ最初のエラーが表示される。quickfixを参照。
[errorfile]が与えられない場合、オプション 'errorfile' がファイ
ル名として使用される。省略値に関しては 'errorfile' を参照。
(nothing) 上記の4つのうち、どれも指定せずにVimを起動すると、新しいバッ
ファが用意される。それは名前のない空のバッファである。
起動時のモードはプログラム名を "vim" とは別の名前にすることで指定できる。それ
は次のようにオプションを与えたのと同じである:
ex vim -e Exモードで起動 (Ex-modeを参照)。 ex
exim vim -E 改良版Exモードで起動 (Ex-modeを参照)。 exim
(通常はインストールされない)
view vim -R 読み込み専用モードで起動 (-Rを参照)。 view
gvim vim -g GUIで起動 (guiを参照)。 gvim
gex vim -eg GUIのEXモードで起動。 gex
gview vim -Rg GUIの読み込み専用モードで起動。 gview
rvim vim -Z "vim" の制限モードで起動 (-Zを参照)。 rvim
rview vim -RZ "view" の制限モード。 rview
rgvim vim -gZ "gvim" の制限モード。 rgvim
rgview vim -RgZ "gview" の制限モード。 rgview
evim vim -y 簡易操作のVim (-yを参照) evim
eview vim -yR "evim" と同じ。読み込み専用モード。 eview
vimdiff vim -d 差分モードで起動diff-mode
gvimdiff vim -gd 差分モードで起動diff-mode
これらの別名の後ろに付けられる文字は無視される。たとえばGUIで起動するのに
"gvim-8" という名前を付けることができる。もちろんその名前で実行可能なファイル
がなければならない。
UNIXでは通常、Vimという名前の実行可能ファイルが一つあり、それに対して違う名前
のリンクが用意される。使用しているシステムがリンクをサポートせず、実行ファイル
のコピーを幾つも作りたくないのならば、リンクの代わりにエイリアスを使うこともで
きる。例:
startup-options
オプション引数はどんな順番で与えても良い。一文字のオプションは一つのダッシュ
(-)の後に組み合わせる。引数 "--" の後にはオプション引数を置くことはできない。
VMSでは全てのオプション引数は小文字であるとみなされる。大文字を指定するにはス
ラッシュを前に置く。つまり "-R" でリカバリモード、"-/R" で読み込み専用となる。
--help -h --help -?
-?
-h 使用法(ヘルプ)を表示して終了する。
そのテキストを保存するにはinfo-messageを参照。
--version
--version バージョン情報を表示して終了する。出力は:versionコマンドと一
緒。
そのテキストを保存するにはinfo-messageを参照。
--noplugin
--noplugin プラグインを読み込まない。'loadplugins' オプションをオフにす
る。
Note: -u引数でもプラグインを読み込まないようにできる:
引数 load: vimrcファイル プラグイン defaults.vim
なし yes yes yes
-u NONE no no no
-u DEFAULTS no no yes
-u NORC no yes no
--noplugin yes no yes
--startuptime {fname} --startuptime
起動処理の間、経過時間のメッセージをファイル {fname} に書き出
す。.vimrc やプラグインの読み込み、最初のファイルの読み込みに
おいて、どこで時間がかかっているかを調べるために役に立つ。
{fname} が既に存在するときはそのファイルに追記される。
{+startuptime 付きでコンパイルされたときのみ有効}
--literal
--literal ファイル名を文字どおり解釈する。ワイルドカードを展開しない。
Unixでは必要ない、Vimは常にファイル名を文字どおり解釈する(シェ
ルがワイルドカードを展開する)。
全てのファイル名に適用される。この引数の前に指定したものも同
じ。
-+
+[num] 最初に編集されるファイルの "num" 行目にカーソルを置いて開く。
"num" がなかった場合には、カーソルは最終行に置かれる。
-+/
+/{pat} 最初に編集されるファイルの、"pat" を含む最初の行にカーソルを置
いて起動する(指定可能な検索パターンについてはpatternを参
照)。検索はカーソル位置から開始される。カーソルの位置は最初の
行か、もしくは viminfo から復元された最後に使われた位置の場
合もある。必ず最初の行から検索したい場合は "+1 +/pat" を使う。
+{command} -+c -c
-c {command} 最初のファイルが読み込まれた後(加えてそのファイルに適用される
autocommandとmodelineが処理された後)に{command}が実行される。
"command" はExコマンドとして解釈される。"command" にスペースを
含んでいる場合には、ダブルクォートで挟まれている必要がある(こ
れは使われているシェルに依存する)。例:
Note: Vimコマンドの引数として "+" か "-c" をあわせ、最大10個ま
で使うことができる。これらの引数は与えられた順番で実行される。
"-S" 引数は "-c" として同じように数える。
--cmd {command} --cmd
vimrcファイルを処理する前に{command}を実行する。それ以外は
-c {command} と同じである。"-c" 引数とは別に、10個まで使うこと
ができる。
-S
-S {file} 最初のファイルが読み込まれた後に{file}を実行する。これは次のも
のを簡単にしたものである:
10個まで指定できる。
{file}の先頭文字には "-" は使えない。
作業をして Vim を終了するスクリプトを実行するのには使わない
こと、エラーメッセージが見えないだろう。代わりに -u を使うこ
と。
-S "-S Session.vim" と同じ。最後の引数として使われたときや、その
後に他のオプション引数が続いたときのみこのように解釈される。
-r
-r リカバリモード。ファイル名の引数なしで実行した場合には、存在す
るスワップファイルのリストが表示される。ファイルを指定すると、
クラッシュしたセッションを復活させるために、スワップファイルが
読み込まれる。crash-recoveryを参照。
-L
-L -rと同じ。
-R
-R 読み込み専用モード。オプション 'readonly' が、編集される全ての
ファイルに設定される。これにより、まだバッファを編集することは
できるが、偶然にファイルを上書きしてしまうようなことは防がれ
る。もしも、読み込み専用モードにいることを忘れてバッファへ変更
を行ったとしても、":w!" のようにExコマンドに「ビックリマーク」
を付けることで上書きすることが可能。'readonly' オプションは
":set noro" としてオフに設定することが可能である(オプションを
説明した章optionsを参照)。その後の編集は読み込み専用モードで
はなくなる。実行ファイルを "view" として起動した場合は、この-R
引数と同じ動作になる。オプション 'updatecount' は10000に設定さ
れ、これはスワップファイルがそう頻繁には自動更新されなくなると
いうことである。
変更を不許可とするには -M を参照。
-m
-m 変更を保存できなくする。オプション 'write' がオフに設定され、
ファイルを保存することができなくなる。オプション 'write' をオ
ンすれば、再び保存することが可能になる。
-M
-M 変更できないようにする。オプション 'modifiable' がオフに設定さ
れ、変更を加えることができなくなる。さらに、オプション 'write'
がオフに設定され、ファイルを保存することができなくなる。
'modifiable' と 'write' をオンにすれば、変更を加えて保存できる
ようになる。
-Z restricted-mode E145 E981
-Z 制限モード。外部シェルを実行するあらゆるコマンドの使用を許可
しない。これにはサスペンドであるCTRL-Zや、":sh"、フィルタリン
グ、system() 関数、バッククォートの評価、libcall() が含まれる。
delete()、rename()、mkdir()、job_start() なども許可されていな
い。
Python、Ruby、Luaなどのインターフェイスも、シェルコマンドの実
行に使用される可能性があるため無効になっている。PerlはSafeモ
ジュールを使用している。
Note ユーザーはまだシェルコマンドを実行する抜け穴を見つけるか
もしれない、それが困難になっただけである。
-g
-g VimをGUIモードで起動する。guiを参照。逆は-vを参照。
-v
-v ExをViモードで起動する。実行ファイルが "ex" や "gvim" である時
にだけ、違いが現れる。gvimでは可能ならば "GUI" ではないモード
で起動する。
-e
-e VimをExモードで起動するQ。実行ファイルの名前が "ex" 以外の時
に意味がある。
-E
-E Vimを改良版Exモードで起動するgQ。実行ファイルの名前が "exim"
以外の時に意味がある。
-s-ex
-s サイレント(もしくはバッチ)モード。Vimが "ex" で起動されるか、
このオプションよりも先に "-e" が付いていた場合にだけ働く。そう
でない場合には-sを参照。-sとして使うときには引数をとる。
端末の替わりにファイルからExコマンドを実行する場合に使用され
る。ほとんどのプロンプトとメッセージは抑制される。警告とエラー
のメッセージも抑制される。
次のコマンドの出力は標準出力へ表示される:
:print
:list
:number
:set オプション値を表示するため。
'verbose' が0以外のときにはメッセージは抑制されずに標準エラー
出力へ表示される(デバッグ用)。
'term' と $TERM は考慮されない。
Vimが停止しているようだったら "qa!<Enter>" と入力してみてほし
い。Vimがユーザーの入力を待っているときでもプロンプトは表示さ
れない。
初期化処理はスキップされる(このオプションが引数 "-u" と一緒に
使われた場合は除く)。
例:
ルを実行する:
-b
-b バイナリモード。ファイルを入出力する再に<NL>だけを行のセパレー
タとして認識するようになる。オプション 'expandtab' は無効化さ
れる。オプション 'textwidth' は0に設定される。'modeline' はオ
フに設定される。オプション 'binary' がオンに設定される。これは
vimrc/exrcのファイルが読み込まれた直後、引数で与えられたファイ
ルが読み込まれるよりも前に行われる。edit-binaryも参照。
-l
-l Lispモード。オプション 'lisp' と 'showmatch' をオンに設定する。
-A
-A アラビア語モード。オプション 'arabic' をオンに設定する。
{+arabic(これは+rightleftも含んでいる)が有効なときだけ使用
できる。そうでないときにはVimはエラーメッセージを出力して終了
する}
-F
-F これはFarsi(ペルシア語モード)で使用されていましたが、削除され
た。farsi.txt を参照。
-H
-H Hebrew(ヘブライ語)モード。オプション 'hkmap' と 'rightleft' を
オンに設定する。{+rightleftを有効にしてコンパイルした時にだ
け使用可。そうでない場合Vimはエラーメッセージを表示して終了す
る}
-V verbose
-V[N] 詳細表示する。オプション 'verbose' を[N]に設定する(Nを省略した
場合は10が設定される)。":source" が実行される度、viminfoの読み
書きを行う度に情報が表示される。Vimの起動時と終了時の動作を調
べるときに便利である。
例:
-V[N]{filename}
-V と同様で、さらに 'verbosefile' を {filename} に設定する。そ
の結果、メッセージは表示されずにファイル {filename} に書き出さ
れる。{filename} は数字で始まってはならない。
例:
-D
-D デバッグする。スクリプトの最初のコマンドを実行するところからデ
バッグを開始する。debug-mode
{+evalが有効な場合のみ利用可能}
-C
-C 互換モード。オプション 'compatible' をオンに設定する。.vimrc
ファイルが存在する場合にもViとの互換性を得ることができる。プラ
グインや起動時スクリプトで ":set nocompatible" とするとこのオ
プションより優先されるため、起動後には 'nocompatible'になって
しまうだろう。どこで最後に設定されたかを調べるには次のコマンド
を使う:
動処理の後でこれをセットするにはこのようにする:
-N
-N 非互換モード。オプション 'compatible' をオフに設定する。
.vimrc ファイルがないときや、"-u NONE" としているときに、
'nocompatible' (Vimの拡張を有効) にすることができる。
compatible-defaultも参照。
-y easy
-y 簡易モード。evimやeviewと同じ。'insertmode' をオンに設定し
て起動し、モードレスエディタのように振舞う。このスイッチを指定
すると、$VIMRUNTIME/evim.vimが自動的に読み込まれ、一般的なエ
ディタと同じ操作ができるようなマッピングが設定される。
evim-keysを参照。利用可能ならGUIが使用される。
-n
-n スワップファイルを使用しない。クラッシュしたときに編集していた
ファイルを復旧することはできなくなる。フロッピーディスクのよう
な非常に低速なメディアのファイルを読んだり編集したいときに有用
である。":set updatecount=0" と設定するのと同じである。オプ
ション 'updatecount' に0より大きい値を設定することで、スワップ
ファイルの使用を有効にすることができる。例、":set uc=100"。
NOTE: -n と -b を合わせて -nb としないこと。-nb には別の意味が
ある: -nb
vimrc ファイルの実行解釈の直後で、GUIが初期化される前に
'updatecount' が0に設定される。よって vimrc ファイルの中で
'updatecount' を設定しても上書きされてしまうが、gvimrcでの設定
は上書きされない。startupを参照。ディスクへのアクセスを減ら
したいのならば(ノートPCを使用している場合など)、"-n" を使用す
る替わりに、'updatetime' を設定し、'updatecount' に非常に大き
い値を設定して、編集中のファイルを保存する時に ":preserve" を
利用すると良い。この方法だとクラッシュからの復旧の可能性を保て
る。
-o
-o[N] N個のウィンドウを水平分割して開く。[N]が与えられない場合には、
引数で指定された全てのファイルに対して1個のウィンドウが開かれ
る。画面に十分な広さがない場合には、始めのほうの数個のファイル
だけがウィンドウを伴って表示される。逆にファイルの数よりもウィ
ンドウの数が多く指定された場合、多い分のウィンドウは空ファイル
の編集用として開かれる。
-O
-O[N] N個のウィンドウを垂直分割して開く。それ以外は-oと同じ。
-oと-Oが両方指定されたときは最後に指定された方を使用する。
-p
-p[N] N 個のタブページを開く。[N] が省略されると、引数として与えられ
た各ファイルに対し1つずつタブページを開く。最大値は
'tabpagemax' ページ(既定値は 10)である。引数よりも多くのタブペー
ジが作られる場合は、最後の数個のタブページは空ファイルを開く。
tabpage も参照。
-T
-T {terminal} 端末の種類を "terminal" に設定する。これはVimがユーザーの端末
へ送るコードに影響を与える。Vimはユーザーが使用している端末の
種類を自分で判断することができるので、通常これは必要がない
(terminal-infoを参照)。
--not-a-term
--not-a-term 入力と出力(もしくはどちらか一方)が端末に接続されていないこと
を、ユーザーが把握しているということをVimに伝える。これにより
警告が表示され2秒間の遅延が発生するのを避けられる。
"Reading from stdin..." のメッセージを避けることもできる。
"N files to edit" のメッセージを避けることもできる。
--ttyfail
--ttyfail 標準入力か標準出力が端末(tty)でない場合、すぐに終了する。
-d
-d 差分モードで起動する。vimdiffと同じ。
{+diffが有効な場合のみ利用可能}
-d {device} Amiga専用機能。+diffが無効な場合のみ利用可能。-devと同じよ
うに機能する。
-dev
-d {device} Amiga専用機能: {device}が編集用に開かれる。
普通、ウィンドウの位置とサイズを設定するために
"-d con:x/y/width/height" の形式で指定する。例、
"-d con:30/10/600/150"。しかしその他のAUX:のようなデバイスの編
集を開始することにも使用できる。
-f
-f GUI: Vimを起動したプログラム(プロセス)から独立しない。
'f' は "foreground" を意味する。省略すると、GUI版のVimは新しい
プロセスへforkして、現在のプロセスは終了してしまう。gvimの編集
セッションが終わるのを待つプログラム(メールソフトやニュースリー
ダーなど)には、"-f" を使うべきだろう。gvimがforkしないようにす
るには、自分の .gvimrc の中で 'guioptions' に 'f' を加えれば良
い。
Note: "-gf" でGUIをフォアグラウンドで実行開始できるが、"-fg"
だと前景色の設定になってしまう。gui-fork参照。
Amiga: Vimを新しいウィンドウで起動しない。編集作業が終わるのを
待つプログラム(メールソフトやニュースリーダー)によって Vimが起
動される時に、このオプションは使用される。amiga-windowを参照。
MS-Windows: このオプションはサポートされない。vim.bat や
gvim.bat 経由で起動した場合は機能する。
--nofork
--nofork GUI: forkしない。-fと同じ。
-u E282
-u {vimrc} 初期化のためにファイル{vimrc}が読込まれる。その他の初期化はス
キップされる。initializationを参照。
これにより特殊なマッピングや設定をした、特殊なモードでVimを起
動することができる。これを簡単に使用するにはシェルのエイリア
スが使えるだろう。例:
{vimrc}に "NONE" (全て大文字)が指定された時には、設定ファイル
や環境変数による初期化、.gvimrcによるGUIの初期化も含め、全て省
略される。プラグインも読み込まれない。
{vimrc}が "NORC" (全部大文字)のときは "NONE" と同じように処理
されるが、プラグインは読み込まれる。
{vimrc} が "DEFAULTS" (全部大文字) のときは "NONE" と同じよう
に処理されるが、defaults.vim スクリプトが読み込まれる。また
'nocompatible' が設定される。--clean も参照すること。
"DEFAULTS" 以外の引数と共に "-u" 引数を使用すると、副作用とし
てオプション 'compatible' がデフォルトでオンに設定される。これ
は予期せぬ動作を引き起こすかもしれない。'compatible' を参照。
-U E230
-U {gvimrc} GUIがスタートする時にファイル{gvimrc}が読込まれる。その他のGUI
初期化はスキップされる。{gvimrc}にNONEが指定された場合、初期化
ファイルは何も読込まれない。 gui-init
例外: システムのメニューファイルは常に読込まれる。
-i
-i {viminfo} デフォルトのviminfoの代わりにファイル{viminfo}を使用する。
"NONE" (全て大文字)が指定された場合には、'viminfo' が指定され
たり、":rv" や ":wv" が使われても、viminfoは読み書きともに使用
されない。viminfo-file参照。
--clean
--clean "-u DEFAULTS -U NONE -i NONE" に類似している:
- ファイルや環境変数からの初期化はスキップされる。
- 'runtimepath' および 'packpath' は、ホームディレクトリのエン
トリを除外するように設定されます (-u DEFAULTS では発生しませ
ん)。
- defaults.vim スクリプトが読み込まれる。これは
'nocompatible' を含む: Vim のデフォルトを使う。
- gvimrc スクリプトは読み込まれない。
- viminfo ファイルは読み書きされない。
Note 以降の "-u" 引数は "-u DEFAULTS" を上書きする。
-x
-x ファイルの読み書き時に暗号化を施す。暗号の鍵としてオプション
'key' に設定された値を使用する。全ての書き込みは、テキストに対
して鍵を使って暗号化を行ってから なされる。ファイルを読込む時
には、Vimは暗号化ファイルかチェックし、自動的に鍵を聞いてくる
ので、引数 '-x' は必要でない。encryption
-X
-X Xサーバーと通信しない。そうして、カレントウィンドウのタイトル
を取得したり、Xのクリップボードを使ったコピー/ペーストを使用し
たりしない。端末エミュレータでVimを使用するときにXサーバーとの
通信速度が遅い場合にそれを回避できる。
効果があるか確かめるには --startuptime を使ってみること。
UnixかVMSで+X11が有効な場合のみ意味がある。
特定の端末を使用するときだけ通信を無効にするには、オプション
'clipboard' を参照。
X11 Session Management Protocol (XSMP) の処理が組み込まれてい
る場合、その通信にも大きな延滞が生じるため、無効にする。
(例えばクライアントとサーバーが通信するため)あとからXサーバー
との通信をつなげるにはserverlist()関数を呼び出す。ただしXSMP
の処理は有効にならない。
-s
-s {scriptin} スクリプトファイル{scriptin}が読込まれる。ファイルの中のキャラ
クタは、全てユーザーがタイプしたものとして解釈される。エディタ
が終了する前にファイルの終端に達した場合、以降のキャラクタは
キーボードから読込まれる。Exモード動作時には働かない、-s-ex
を参照。complex-repeatも参照。
-w_nr
-w {number}
-w{number} オプション 'window' を {number} に設定する。
-w
-w {scriptout} Vimを終了するまで、ユーザーが入力した全部の文字が記録され、ファ
イル{scriptout}に書き出される。これは "vim -s" や ":source!"
で読込まれるスクリプトファイルを作成するのに役立つ。既にファイ
ル "scriptout" が存在する場合には、そのファイルに追加保存する。
complex-repeatも参照。
{scriptout} は数字で始まってはならない。
-W
-W {scriptout} -wに似ているが、アペンド(追加)せずに、既にあるファイルを上書き
する。
--remote [+{cmd}] {file} ...
サーバーとして機能している他のVimで{file}を開く。
この引数の前にファイルを指定することはできない。
--remoteを参照。
--remote-silent [+{cmd}] {file} ...
--remoteと同じ。ただしサーバーがなくてもメッセージを出さない。
--remote-silentを参照。
--remote-wait [+{cmd}] {file} ...
--remoteと同じ。ただしサーバーが終了するまで待機する。
--remote-waitを参照。
--remote-wait-silent [+{cmd}] {file} ...
--remote-waitと同じ。ただしサーバーがなくてもメッセージを出さ
ない。--remote-wait-silentを参照。
--servername {name}
Vimサーバーの名前を指定する。これは通信先のサーバー名、あるい
は起動するVimが使用する名前である。
--servernameを参照。
--remote-send {keys}
{keys}をVimサーバーに送り、終了する。
--remote-sendを参照。
--remote-expr {expr}
Vimサーバーで{expr}を評価し、その結果を標準出力に出力する。
--remote-exprを参照。
--serverlist
稼動しているVimサーバーの一覧を出力する。
--serverlistを参照。
--socketid {id} --socketid
GTK+ GUIのVimのみ。GtkPlugを使用し、別アプリケーションのウィン
ドウで起動するようにする。詳細はgui-gtk-socketidを参照。
--windowid {id} --windowid
Win32 GUI の Vim のみ。ウィンドウ {id} を親ウィンドウにしよう
と試みる。成功するとそのウィンドウの内側で起動する。詳しくは
gui-w32-windowid を参照。
--echo-wid --echo-wid
GTK+ GUIのVimのみ。ウィンドウのIDを標準出力に出力する。この値
はgvimをkpartウィジェットに埋め込むのに使用できる。出力の書式
は:
--role {role} --role
GTK+ 2 GUIのみ。メインウィンドウの役割(role)を{role}に設定す
る。ウィンドウの役割はウィンドウマネージャーがウィンドウを識
別して、ウィンドウの位置等を復元するのに使われる。この引数は
ログイン時にセッションを復元するときに自動的に使用される。
gui-gnome-sessionを参照。
-P {parent-title} -P MDI E671 E672
Win32のみ。親になるアプリケーションのタイトルを指定する。可能
であればVimはそのMDIアプリケーションのウィンドウ内で起動する。
{parent-title}が親アプリケーションのウィンドウのタイトルに使わ
れていて、明確に区別できる必要がある。
Note: まだ簡単に実装されているだけである。全てのアプリケーショ
ンで動くわけではない。メニューは機能しない。
-nb -nb
-nb={fname}
-nb:{hostname}:{addr}:{password}
Netbeansと接続し、エディタサーバーになる。2番目の型は接続情報
を格納したファイルを指定する。3番目の型はNetbeansに接続するた
めのホスト名、アドレス、パスワードを指定する。netbeans-run
{+netbeans_intg 機能つきでコンパイルされたときのみ有効; もし
そうでなければ、-nb は Vim を終了させる}
実行ファイルが "view" だったならば、Vimは読込み専用モードで起動する。"view" か
ら "vim" へハードリンクかシンボリックリンクを作成すると便利だろう。"vim -R" と
することでも読込み専用モードで起動できる。
実行ファイルの名前が "ex" ならば、VimはExモードで起動する。これは ":" コマンド
だけしか使えないことを意味している。しかし引数 "-v" が与えられれば、Vimは常に
ノーマルモードで起動する。
unix互換のシステムでX11 GUIサポートが有効ならさらに多くの引数が利用可能であ
る。gui-resourcesを参照。
==============================================================================
2. Amiga版のVim starting-amiga
VimをWorkbenchから起動する workbench
--------------------------
Workbench上でアイコンを2度クリックすればVimを起動することができる。そうすると
空のバッファで起動するだろう。
"Project" アイコンを使用することで、1つ以上のファイルを開くことができる。アイ
コンの "Default Tool" にはVimの実行ファイルの完全なパスを設定し、".info" ファ
イルの名前には、編集するテキストファイルの名前を設定する。このアイコンを2度ク
リックすると、Vimが起動してそのファイルを開く(そのファイルがあれば)。シフトキー
を押しながらアイコンをクリックし、最後のファイルを2度クリックすることで、複数
のファイルを開くことができる。これら全てのアイコンの "Default Tool" は同じでな
ければならない。
Workbenchからではファイル名以外の引数は、Vimへ与えることができない。
Vimウィンドウ amiga-window
-------------
Vimは起動されたCLIウィンドウの中で動作する。Vimが "run" や "runback" コマンド、
あるいやWorkbenchから起動された場合には、自分自身でウィンドウを開く。
技術的詳細:
新しいウィンドウを開くためにちょっとしたトリックを使う。Vimは普通のCLI
ウィンドウの中で起動されていないことを検出するとすぐに、"t:" にあるス
クリプトファイルを作成する。このスクリプトファイルにはVimを起動したの
と同じコマンドに加えて "endcli" コマンドが含まれている。このスクリプト
ファイルは "newcli" コマンドと一緒に実行される (これが行われる時には
"c:run" と "c:newcli" コマンドが必要)。スクリプトファイルはリブートす
るか、手動で消すまで存在しつづける。この方法は ":sh" と ":!" コマンド
が正しく機能する必要がある。しかしVimが-fオプション(フォアグラウンド
モード)で起動された時には、この方法は使われない。Vimを-fオプションで起
動した時には、その終了を待つからである。スクリプトのトリックを使うと、
Vimを呼び出したプログラムはその終了を知ることができない。オプション-f
はメールプログラムなど編集のセッションが終わったことを 検出したい場合
に、Vimを起動する方法として使用される。だからオプション-fが指定された
時には、":sh" と ":!" コマンドは使用することができない。
Vimは自動的にウィンドウのサイズを認識して対応する。Amiga DOS 1.3の元では、表示
の更新速度を上げるために、fastfontsのプログラム "FF" の支援を受けて動作する。
==============================================================================
3. eVimについて evim-keys
EVimはVimをモードレスエディタとして実行する。これはViらしくない発想ではある
が、Vimの操作方法を覚えられるほどには使用しない人の助けになる。ノーマルモード
のコマンドを覚えることで編集作業がより簡単になるということを利用者が感付いてく
れれば幸いである。
Evimでは以下のオプションが標準設定から変更される:
:set nocompatible ViにはないVim独自の機能を使う
:set insertmode 常時挿入モードを使用する
:set hidden 非表示になったバッファを開放しない
:set backup バックアップファイルを消さない(VMS以外)
:set backspace=2 どこでもバックスペースを使用できるようにする
:set autoindent 新しい行を入力するときに自動的にインデントする
:set history=50 Exコマンドの使用履歴を50回前まで記録する
:set ruler カーソルの位置を表示する
:set incsearch 検索時、入力途中にマッチ箇所を表示する
:set mouse=a 全てのモードでマウスを使う
:set hlsearch 検索した文字を強調表示する
:set whichwrap+=<,>,[,] <Left>と<Right>を使った左右の移動で行を跨ぐ
:set guioptions-=a 非Unixのみ。選択時に自動的にコピーしない
キーマッピング:
<Down> 実際の行ではなく表示された行の単位で移動する
<Up> 同上
Q "gq" コマンドで文章整形する。
<BS> ビジュアルモードで選択範囲を削除する
CTRL-X ビジュアルモードで選択範囲を切り取ってクリップボードに
コピーする
<S-Del> 同上
CTRL-C ビジュアルモードで選択範囲をクリップボードにコピーする
<C-Insert> 同上
CTRL-V クリップボードから貼り付ける(どのモードでも)
<S-Insert> 同上
CTRL-Q 本来のCTRL-Vの機能
CTRL-Z 元に戻す(undo)
CTRL-Y やり直し(redo)
<M-Space> システムメニューを表示
CTRL-A 全てを選択する
<C-Tab> 次のウィンドウへ。CTRL-W w と同じ
<C-F4> ウィンドウを閉じる。CTRL-W c と同じ
追記:
- ":behave mswin" が使用される:behave
- 構文強調表示が有効になる
- ファイルタイプ別の機能が有効になる。ファイルタイプ用のプラグインやインデント
が使用される。
- テキストファイルでは 'textwidth' が78に設定される
ヒント: ノーマルモードのコマンドを連続して使用するにはCTRL-Lを使用する。
i_CTRL-L
==============================================================================
4. 初期化 initialization startup
このセクションはVimの非GUIバージョンについて書く。GUIをスタートさせた時の追加
の初期化はgui-forkを参照。
スタート時に、Vimは環境変数とファイルを調べ、然るべく値を設定する。Vimはこの順
序で取り掛かる。
1. オプション 'shell' と 'term' を設定する SHELL COMSPEC TERM
環境変数SHELLが存在するならば、オプション 'shell' を設定するのに使われ
る。Win32ではSHELLが設定されていない場合COMSPECの値が使用される。
環境変数TERMが存在するならば、オプション 'term' を設定するのに使われ
る。しかし、後で GUI を開始するときに 'term' は変更される(下のステップ
8を参照。
2. 引数を処理する
Vimを起動するときに指定したオプション引数やファイル名を調べる。指定さ
れたファイルのバッファを作成する(まだ読み込まない)。
引数 -V を使うと、初期化処理のデバッグ用にこれ以降で起こることを表示
したりログに書き出したりできる。
3. 環境変数とファイルのExコマンドを実行する
環境変数の値は一つのExコマンドラインとして読まれるので、複数のコマンド
を実行したい時には '|' か "<NL>" で区切る必要がある。
vimrc exrc
"vimrc" ファイルは初期化コマンドを含んだファイルである。vimrcファイル
は一行ずつExコマンドとして実行される。"exrc" とほぼ等価である。それら
は同じタイプのファイルであるが、"exrc" が常にViによって使われるのに対
して、"vimrc" はVim特有のものである。vimrc-introも参照。
個人の初期化ファイルの配置場所:
Unix $HOME/.vimrc、$HOME/.vim/vimrc
MS-Windows $HOME/_vimrc、$HOME/vimfiles/vimrc、
$VIM/_vimrc
Amiga s:.vimrc、home:.vimrc、home:vimfiles:vimrc、
$VIM/.vimrc
Haiku $HOME/config/settings/vim/vimrc
初期化ファイルは上記の順に検索され、最初に見つかったものだけが読み込ま
れる。
推奨: Vimの設定ファイルは全て $HOME/.vim/ ディレクトリ(MS-Windowsでは
$HOME/vimfiles/)に置くこと。そうすれば設定ファイルを別のシステムにコ
ピーするのが容易になる。
Vimが "-u filename" で起動された場合、デフォルトのvimrcの代わりに
"filename" が使われる。続く初期化処理の4.までがスキップされる。
$MYVIMRC は設定されない。
"vim -u NORC" によりファイルを読み込むことなくこれらの初期化を省略する
ことができる。"vim -u NONE" を使用するとさらにプラグインも読み込まな
い。-u
起動引数 "-s" によりVimがExモードで起動されたならば、続く4.までの初期
化処理がスキップされる。オプション "-u" だけが処理される。
evim.vim
a. Vimをevimやeviewとして、あるいは-y引数を指定して起動すると
$VIMRUNTIME/evim.vimが実行される。
system-vimrc
b. Unix、MS-Windows、VMS、Macintosh、そしてAmigaでは、システムのvimrcファ
イルが初期化のために読み込まれる。このファイルのパスは ":version" コマ
ンドによって確認できる。普通は "$VIM/vimrc" である。Note: このファイル
は 'compatible' モードであっても読み込まれる。'compatible' の自動リセッ
トはこれが終わった後に行われることになっている。必要ならば ":set nocp"
コマンドを追加する。Macintosh では $VIMRUNTIME/macmap.vim が読み込まれ
る。
VIMINIT .vimrc _vimrc EXINIT .exrc _exrc $MYVIMRC
c. 初期化のために5つの場所が検索される。最初に見つかったものが使用され、
残りは無視される。ここまでで環境変数 $MYVIMRC が設定されていなく、
VIMINIT を使っていないなら、$MYVIMRC に最初にみつかったファイルが設定
される。
I 環境変数VIMINIT(compatible-defaultも参照) (*)
その内容はExコマンドとして解釈される。
II ユーザーvimrcファイル:
"$HOME/.vimrc" (for Unix) (*)
"$HOME/.vim/vimrc" (for Unix) (*)
"s:.vimrc" (for Amiga) (*)
"home:.vimrc" (for Amiga) (*)
"home:vimfiles:vimrc" (for Amiga) (*)
"$VIM/.vimrc" (for Amiga) (*)
"$HOME/_vimrc" (for Win32) (*)
"$HOME/vimfiles/vimrc" (for Win32) (*)
"$VIM/_vimrc" (for Win32) (*)
"$HOME/config/settings/vim/vimrc" (for Haiku) (*)
Note: UnixとAmigaでは、".vimrc" がなかった場合には、MS-DOS互換
のファイルシステムを使用することを考え、"_vimrc" も試みられる。
MS-Windowsでは "_vimrc" を探したあとで、ロングファイルネームが
使われる場合は ".vimrc" が探される。
Note: Win32では "$HOME" がまず検査される。"_vimrc" と ".vimrc"
のどちらもない場合には、"$VIM" が調べられる。$VIMが設定されて
いない場合については$VIM参照。
III 環境変数EXINIT。
その内容はExコマンドとして解釈される。
IV ユーザーのexrcファイル。vimrcと同じだが、vimrcがexrcによって置き換
えられている。しかし ".exrc" と "_exrc" のどちらか1つだけが使われ
る。これはシステムによる。(*)の注釈は適用されない。
V デフォルトの $VIMRUNTIME/defaults.vim を読み込む。これは、大半の新
規ユーザーが必要するであろう各種オプションを設定し、"syntax on" 及
び "filetype on" コマンドを含んでいる。defaults.vim を参照。
d. 'exrc' オプションがオン(初期状態ではオフ)の場合、現在のディレクトリで3
つのファイルが検索される。最初に見つかったものだけが使用され、残りは無
視される。
- The file ".vimrc" (for Unix, Amiga) (*)
"_vimrc" (for Win32) (*)
- The file "_vimrc" (for Unix, Amiga) (*)
".vimrc" (for Win32) (*)
- The file ".exrc" (for Unix, Amiga)
"_exrc" (for Win32)
(*) このファイルを使用するか環境変数を使用した場合、自動的に 'compatible'
オプションがオフに設定される。compatible-defaultを参照。
Note: mzscheme インターフェイスを使用する場合は、vimrc ファイルの読み込
みの後に初期化される。それより後に 'mzschemedll' を変更しても効果はない。
4. プラグインスクリプトを読み込む load-plugins
次のコマンドと同じことを実行する:
"plugin" にある拡張子が ".vim" となっているファイルを実行する(各ディレ
クトリごとに名前順で実行される)。サブディレクトリに対しても再帰的に検
索される。
ただし "after" において変更した 'runtimepath' 内のディレクトリはこの手
順をスキップし、afterパッケージだけを読み込む。下の説明を参照。
次の場合にはプラグインを読み込まない:
- vimrcファイルでオプション 'loadplugins' がオフに設定された。
- 起動時の引数に--nopluginが指定された。
- 起動時の引数に--cleanが指定された。
- 起動時の引数に "-u NONE" が指定された。
- +evalの機能を無効にしてVimをコンパイルした。
Note: 引数に "-c set noloadplugins" と指定しても意味がない。このコマン
ドはこの時点ではまだ実行されない。"--cmd 'set noloadplugins'" または
"--cmd 'set loadplugins'" とすればよい。--cmd
パッケージが読み込まれる。'packpath' 内の各エントリの "start" ディレク
トリの下で見つかったプラグインだけが上記の要領で読み込まれる。見つけた
pluginディレクトリはすべて 'runtimepath' に追加され、すべてのプラグイ
ンが読み込まれる。詳細は packages を参照。
プラグインスクリプトが読み込まれるが、しかし上で言及したように、ここで
は "after" で終わるディレクトリに限られる。パッケージが見つかった際に
は 'runtimepath' が変更されるが、"after" で終わるディレクトリは追加さ
れないことに注意。
5. 'shellpipe' と 'shellredir' を設定する
それ以前に設定されていなければ、'shell' オプションに従って 'shellpipe'
と 'shellredir' オプションが設定される。つまり自分で設定しなくても、
Vimが適切な 'shellpipe' と 'shellredir' の値を設定してくれる。
6. "-n" コマンド引数が使用されていたら、'updatecount' を0に設定する
7. バイナリオプションを設定する
Vimの起動時に "-b" フラグが与えられた場合、この時点でバイナリ編集用の
フラグが設定される。-b参照。
8. GUIの初期化を行う
"gvim" として起動された場合、GUIの初期化が行われる。gui-init参照。
9. viminfoファイルを読み込む
'viminfo' オプションが空でなければ、viminfoファイルが読み込まれる。
viminfo-file参照。
10. quickfixファイルを読み込む
Vimに "-q" フラグが与えられた場合、quickfixファイルが読み込まれる。こ
れに失敗するとVimは終了する。
11. 全てのウィンドウを開く
-oフラグが与えられた場合、ウィンドウが開く(しかしまだ表示されない)。
-pフラグが与えられた場合、タブページが作られる(しかしまだ表示されな
い)。
スクリーンが切り替えられると、描画が始まる。
"-q" フラグがVimに与えられた場合、最初のエラーにジャンプする。全ての
バッファが BufAdd 自動コマンドを起動することなくロードされる。
12. スタートアップコマンドが実行される
"-t" フラグがVimに与えられた場合、タグにジャンプする。
-cと+cmd引数で与えられたコマンドが実行される。
'insertmode' オプションがセットされていると、挿入モードに入る。
スタートフラグがリセットされ、has("vim_starting") がゼロを返すようにな
る。
v:vim_did_enter 変数が 1 にセットされる。
VimEnterのautocommandが実行される。
最初に見つかった vimrc、gvimrc が $MYVIMRC、$MYGVIMRC に設定される。
初期化のヒント
スタンダードセットアップ:
全ての編集セッションに有効な、デフォルト設定とキーマッピングを設定するvimrc
ファイルを作成する。それを既に3bで述べた位置に置く:
~/.vimrc (Unix)
s:.vimrc (Amiga)
$VIM\_vimrc (Win32)
~/config/settings/vim/vimrc (Haiku)
Note vimrcファイルを作るとデフォルトで 'compatible' オプションがオフに設定され
る。compatible-default参照。
ローカルセットアップ:
特定のディレクトリだけにおいて編集時に必要になるコマンドを vimrcファイルに書
き、そのディレクトリに ".vimrc" (Win32は "_vimrc")という名前で置く。NOTE: Vim
に、これらのファイルを見るように指定するには、'exrc' オプションをオンにする必
要がある。trojan-horse(トロイの木馬)も参照。
システムセットアップ:
これは複数人で使うUNIXシステムを管理し、全員のデフォルト設定を行いたい時に適用
される。デフォルト設定とキーマッピングを行うコマンドをvimrcファイルに記述し、
":version" コマンドで表示される場所に置く。
Vimの現在状態をファイルに保存する
オプションの値を変えたときや、キーマッピングを作成した時には、それらを後で再利
用するためにvimrcファイルに保存したいだろう。現在の設定状態をファイルに保存す
るためにはsave-settingsを参照。
Viユーザーの設定の問題の回避
Viは環境変数EXINITとファイル "~/.exrc" を初期化に使用する。もし(Vimの設定が)Vi
に干渉して欲しくないならば、それらを使う替わりにVIMINITとvimrcを使用する。
Amigaの環境変数
Amigaには2種類の環境変数が存在する。1つはDOS 1.3(かそれ以上)のsetenvコマンド
で、これはVimによって認識される。AmigaDos 1.3のマニュアルを参照。古いManxのSet
コマンド(バージョン5.0以前)の環境変数は、認識されない。
MS-Windowsの行区切り文字
MS-Windowsでは、全てのvimrcファイルは行区切文字として<CR><NL>を使用していると
仮定する。<NL>だけを行区切文字として持つファイルで、":map xx yy^M" のような行
がある場合、問題を引き起こす。末尾の ^M は無視されてしまうだろう。
Vi と互換性のあるデフォルトの値
compatible-default
Vim が起動すると、オプション 'compatible' がオンに設定される。これは初期化時に
使用される。しかし以下の条件のいずれかに当てはまると、直ちに 'nocompatible' が
設定される。
- ユーザーの vimrc ファイルが見つかる
- カレントディレクトリに vimrc ファイルが見つかる
- 環境変数 "VIMINIT" が設定されている
- 起動引数 "-N" が指定されている
- 起動引数 "--clean" が指定されている
- defaults.vim がロードされる
- gvimrc が見つかる
上記はシステムの vimrc ファイルでは発生しないことに注意。
これには他のオプションを設定やリセットする副作用がある('compatible' 参照)。し
かし変更されるのは、設定やリセットされていないオプションに限られる。これは、
Vim 起動時に 'compatible' の値に起こるのと同様の作用となる。
'compatible' はリセットされず、defaults.vim が読み込まれない:
- Vimが -u 起動引数で起動され、特にそれが "-u NONE" であった。または…
- -C 起動引数で起動された。または…
- 実行ファイルの名前が "ex" で終わっていた。(これは Vim を "ex" として起動した
場合には、"ex" のように動作させるための仕様である)
'compatible' を .vimrc で設定すると副作用が発生する。マッピングは見つかった時
点で解釈されるので、"<CR>" のようなものを使う時に違いが生じる。もしもマッピン
グが 'compatible' の値に依存している場合、そのマッピングを定義する前に
'compatible' を設定する。
.vimrc ファイルが無い際のデフォルト
defaults.vim E1187
Vim を普通に起動してユーザー vimrc ファイルが見つからない場合には、
$VIMRUNTIME/defaults.vim スクリプトが読みこまれる。このスクリプトは
'compatible' をオフにし、シンタックスハイライトを有効にする他、幾つかのことを
実施する。詳細はそのスクリプトを参照せよ。NOTE: これは正確には Vim 8.0 からで
はなく 7.4.2111 から導入された。
これはVimの新規ユーザーにとって良く機能する。自分で .vimrc を作る際には、その
最上部のほうに以下の2行を追加することが推奨される:
として、defaults.vim 自体をあなたの .vimrc にコピーし、変更をすることもできる。
(ただしこの方法では、将来 defaults.vim が変更された際に、そのアップデートは反
映されない)
もしも defaults.vim の一部が気に入らない場合でも、まず defaults.vim を読み込ん
でから、個々の設定を変更することができる。個別の項目をどのように変更するべきか
のヒントとして defaults.vim ファイルを参照せよ。
skip_defaults_vim
システムワイドの vimrc を使っていて defaults.vim を使いたくない場合には、
"skip_defaults_vim" 変数を設定する。これが設定された状態で、自分の .vimrc で
defaults.vim を読み込みたい場合には、上で示した例のように、最初に unlet
skip_defaults_vim を行うと良い。
トロイの木馬を回避する
trojan-horse
現在のディレクトリにある "vimrc" や "exrc" を読み込むときに、'secure' オプショ
ンを設定することで、安全性のために幾つかのコマンドを無効にすることができる。タ
グファイル内のコマンドを実行する際にも常にこれが行われる。そうでないと他人が作
成した悪意を持ったコマンドを、偶然実行してしまう可能性がある。使用不可になるコ
マンドは、シェルを起動するものと、ファイルに書き込むものと、そして ":autocmd"
である。":map" コマンドは表示され、どのようなマッピングがなされたか確認するこ
とができる。
ローカルなvimrcファイル内で全てのコマンドを実行したい場合には、EXINIT
かVIMINIT環境変数か、グローバルな "exrc" もしくは "vimrc" ファイルで 'secure'
オプションをオフに設定する。現在のディレクトリにある "vimrc" と "exrc" からは、
理由は明らだが、これは設定できない。
UNIXシステムでは、vimrcファイルの所有権がユーザーにないときだけ
'secure' が適用される。警告: vimrcかexrcを含むアーカイブを展開したときには、そ
のファイルはあなた自身のものになる。そこには安全性保護などない。Vimを起動する
前に現在のディレクトリにvimrcファイルがないかチェックするか、'exrc' オプション
をオフに設定したほうが良い。幾つかのUNIXシステムでは一般ユーザーがファイルに
"chown" を行うことを許しているものがある。これは別のユーザーが悪意に満ちた
vimrcを作成し、所有者を貴方にすることを可能にしている。注意されたし!
タグサーチコマンドを使う時には、実行されるサーチコマンド(タグファイル
の各行の最後の部分)は常に安全なモードで行われる。これは現在のディレクトリにあ
るvimrc/exrcからコマンドが実行されるのと、ちょうど同じように働く。
Vimの起動が遅いときには
slow-start
Vimの起動に時間がかかる場合は --startuptime 引数を使って原因を探すことができ
る。よくある原因としては次のようなものがある:
- UnixでGUIやX11を有効にしている場合(":version" の出力で "+GUI" と "+X11" を
チェック)、共有ライブラリをロードしX11サーバーに接続する必要がある。GUIとX11
を無効にしてコンパイルしたバージョンを試して欲しい。これにより実行ファイルが
小さくもなるだろう。
CUI端末でVimを起動するときの引数に-Xを指定するとXサーバーと接続しないよう
にできる。
- "viminfo" を使用している場合、viminfoファイルを読み込むのに少し時間がかかる。
viminfoが原因ならば一時的にviminfoを無効にすることによって確認することができ
る(Vimを引数 "-i NONE" で起動する。-i)。":set viminfo='20,<50,s10" と設定
して、レジスタに保存される行数を減らしてみるのも良い。viminfo-file。
紹介メッセージ
:intro
ファイル名を与えずにVimを起動した場合、(Vimのことを知らない人に向けて)紹介メッ
セージが表示される。そのメッセージはなんらかの操作によって画面が再描画されると
すぐに消される。もう一度メッセージをみるには、":intro" コマンドを使用する(表示
するスペースがなければ一部だけが表示される)。起動時に紹介メッセージを表示しな
いようにするには 'shortmess' に 'I' フラグを追加する。
info-message
起動引数に--helpや--versionを指定するとVimはメッセージを出力して終了する。
通常はそのメッセージは標準出力に送られるので、リダイレクトしてファイルに書き込
むことができる:
Vimでその出力を取り込むには:
gvimは標準出力と標準エラー出力が端末に繋がってないときに、自身がデスクトップか
ら起動され、メッセージを出力する端末がないものと判断する。このせいで上記の
":read" コマンドを使用した例は使えない。使用できるようにするには 'shellredir'
を標準設定の ">&" から ">" へ変更する:
しかしこのようにしてもgvimが標準出力を使用しないようなシステムでは機能しない。
==============================================================================
5. $VIM と $VIMRUNTIME
$VIM
環境変数の "$VIM" は、設定ファイル ".vimrc" のような、Vimが使用するさまざまな
ファイルの置き場所を見つけるために利用される。"$VIM" の値はシステムに依存する。
startupを参照。
全てのユーザーが環境変数$VIMを設定しなくてすむように、Vimは次の順番で$VIMの値
を決定する:
1. 環境変数$VIMが定義されていればそれを使う。$VIMを定義してVimが使用するファイ
ルをそのディレクトリから探し出すようにできる。例:
"$VIMRUNTIME/doc/help.txt" であり、これはニワトリと卵の問題を含んでいる)。
ファイル名("help.txt" など)の部分は取り除かれる。そしてディレクトリ名の最後
が "doc"、"runtime"、"vim{version}" (例えば "vim82")、のどれかならそれも取
り除かれる。
3. Win32ではVimの実行可能ファイルがあるディレクトリを使用する。ディレクトリ名
の最後が "/src" ならそれは取り除かれる。配布されているVim一式の.zipファイル
をあるディレクトリに展開し、検索パスを調整して使っているようなら便利である。
ディレクトリ名の最後が "runtime" か "vim{version}" (例えば "vim82")ならそれ
は取り除かれる。
4. Unixではコンパイル時に指定したインストール先のディレクトリを使用する
(":version" の出力を見て確認できる)。
このうちのどれかが使用できるならVimは環境変数$VIMを設定する。あとからその値を
変更するには ":let" コマンドを次のように使う:
$VIMRUNTIME
環境変数の "$VIMRUNTIME" は、ヘルプファイルや構文強調表示の定義ファイルのよう
な、Vimが使用するさまざまな支援ファイルの置き場所を見つけるために使用される。
例えば、主要なヘルプファイルは通常は "$VIMRUNTIME/doc/help.txt" である。
普通はユーザーが自分で$VIMRUNTIMEを設定せずに、Vimに設定させる。Vimは次の順番
で$VIMRUNTIMEの値を探す:
1. 環境変数$VIMRUNTIMEが設定されていればそれを使う。ランタイムファイルを特殊な
場所に置くときに設定する。
2. "$VIM/vim{version}" ディレクトリがあればそれを使う。{version}はVimのバージョ
ン番号から '-' や '.' を除いた物である。例えば "$VIM/vim82"。これは
$VIMRUNTIME として一般的な値である。
3. "$VIM/runtime" ディレクトリがあればそれを使う。
4. $VIMの値を使う。これは古いバージョンとの互換性のためである。
5. オプション 'helpfile' が設定されていて '$' を含んでいないとき、その値を使用
する。最後の "doc/help.txt" は取り除かれる。
Unixでコンパイル時に$VIMRUNTIMEの初期値を設定した場合(":version" の出力をみて
確認できる)、2から4は無視される。そして5を試したあとにコンパイル時に設定した値
が使用される。つまり$VIMの値を使わずにコンパイル時に設定した値を使用するという
ことである。これは$VIMが "/etc" でランタイムファイルが "/usr/share/vim/vim82"
にあるような場合に便利である。
このうちのどれかが使用できるならVimは環境変数$VIMRUNTIMEを設定する。あとからそ
の値を変更するには ":let" コマンドを次のように使う:
シェル内で $VIMRUNTIME の値が必要な場合(例えば、ヘルプファイルを grep するスク
リプトなど)は、次のようにすれば得られる:
$VIMRUNTIME を空の値に設定してはならない。いくつかの機能が動作しなくなる場合が
ある。
==============================================================================
6. サスペンド suspend
iconize iconise CTRL-Z v_CTRL-Z
CTRL-Z ":stop" のようにVimをサスペンドする。
ノーマルモードとビジュアルモードで動作する。挿入モード
とコマンドラインモードでは、CTRL-Zは通常のキャラクタ文
字として入力・挿入される。ビジュアルモードで使用したと
きはサスペンドから復帰するとノーマルモードになる。
Note: CTRL-Z がアンドゥになる場合は mswin.vim を参照。
:sus[pend][!] or :sus :suspend :st :stop
:st[op][!] Vimをサスペンドする。
'autowrite' がオンのときに '!' を付けなかったときには、
ファイル名を持つ未保存のバッファは全て保存される。
'!' を付けたときや、'autowrite' がオフのときには、未保
存のバッファは保存されないので、後でVimをフォアグラウ
ンドに戻すのを忘れてはならない。
GUIモードでは、サスペンドはgvimのアイコン化として実装されている。MS-Windows で
は、gvimは最小化される。
多くのUNIXシステムでは、VimをCTRL-Zでサスペンドすることが可能である。これは
ノーマルモードとビジュアルモードにおいて有効である(次の章vim-modesを参照)。
Vimを再びフォアグラウンドに戻せば、続きの作業を行うことができる。それ以外のシ
ステムでは、CTRL-Zは新しいシェルをスタートさせる。これはコマンド ":sh" と同じ
である。この場合、シェルを終了させればVimで続きの作業を行うことができる。
{訳注: vim-modesに何がある?}
X-windowsではVimをサスペンドするとセレクションの所有権が失われる。つまり選択し
ていた内容を他のアプリケーションにコピーすることができない(そうしないとVimが停
止しているのでセレクションを得ようとしたプログラムがフリーズしてしまう)。
==============================================================================
7. 終了 exiting
Vimを終了する方法はいくつかある:
- 最後のウィンドウを :quit で閉じる。変更がない場合にのみ。
- 最後のウィンドウを :quit! で閉じる。変更がある場合にも。
- 全てのウィンドウを :qall で閉じる。変更が一切ない場合にのみ。
- 全てのウィンドウを :qall! で閉じる。変更がある場合にも。
- :cquit を使う。変更がある場合にも。
:cquit を使ったり、エラーメッセージがある場合には、Vimは終了コード 1 で終了
する。エラーは :silent! または :catch を使うことで避けられる。
==============================================================================
8. 設定の保存 save-settings
多くの人はvimrcファイルを手作業で編集しているだろう。この機能はそのような人に
優れた利便性を提供する。vimrcファイルを自動的に作成するコマンドが用意されてい
て、作成したファイルをそのまま、もしくは一部分だけをコピーして使用することがで
きる。
:mk :mkexrc
:mk[exrc] [file] 現在のキーマッピングと変更されているオプションを
[file]に保存する( [file]を省略するとカレントディレクト
リの ".exrc" に保存される)。 [file]がすでにあるときに
は保存しない。
:mk[exrc]! [file] 現在のキーマッピングと変更されているオプションを
[file]に保存する( [file]を省略するとカレントディレクト
リの ".exrc" に保存される)。 [file]がすでにあるときに
は上書き保存する。
:mkv :mkvi :mkvimrc
:mkv[imrc][!] [file] ":mkexrc" と同じだが [file]を省略したときにカレントディ
レクトリの ".vimrc" に保存する。コマンド ":version" も
ファイルに書き込まれる。
これらのコマンドは ":map" コマンドや ":set" コマンドをファイルに書き込む。書き
込んだコマンドを実行するとキーマッピングやオプションが現在と同じように設定され
る。オプションの 'columns'、'endofline'、'fileformat'、'key'、'lines'、
'modified'、'scroll'、'term'、'textmode'、'ttyfast'、'ttymouse' は端末やファイ
ルに依存するため含まれない。Note: オプションの 'binary'、'paste'、'readonly'
が含まれるが、これは必ずしも望むような動作ではないかもしれない。
マッピングに特殊なキーが使われているときは、マッピングが正しく解釈されるよう
に、オプション 'cpoptions' が一時的に初期値に戻される。Viとの互換性はなくなる
が、別の端末でもそのマッピングを使用できるようになる。
グローバルなマッピングだけが保存される。バッファローカルなマッピングは保存され
ない。
一般的な方法は、デフォルトの ".vimrc" ファイルを使い、":map" や ":set" コマン
ドで設定を変更し、それをファイルに保存するというものである。まず
":source ~piet/.vimrc.Cprogs" のようなコマンドでデフォルトの ".vimrc" を読み込
み、実際に設定を変更してから、":mkvimrc!" を使ってカレントディレクトリに設定を
保存する。もしもこのファイルをデフォルトの .vimrc にしたいならば、UNIXではホー
ムディレクトリへ、Amigaならば s: へ、MS-Windowsならば $VIM ディレクトリへその
ファイルを移動する。自動コマンドautocommandやモードラインmodelineも、同じ
方法を使って設定することができる。
vimrc-option-example
vimrcにオプションの設定を1つだけ加えるには次のようにする:
1. Vimでvimrcファイルを開く。
2. 期待どおりになるようにオプションを設定する。例えば、'guifont' を設定してい
ろんなフォントを試す。
3. オプションを設定する行を追加する。値を入力するのに '=' レジスタを使用する。
例えば、オプション 'guifont' の設定を加えるには:
特別な文字(特にスペース)はエスケープする必要がある。
Note: .vimrcファイルを作成するときにはオプション 'compatible' が持つ副作用の影
響に注意する必要がある。'compatible'を参照。
副作用を防ぐため、":mkvimrc"、":mkexrc"、":mksession" は最初にオプション
'compatible' の設定を出力する。
==============================================================================
9. ビューとセッション(Views and Sessions) views-sessions
ユーザーマニュアルの21.4と21.5で簡単に紹介されている。
View view-file
ビューとは、あるウィンドウに適用された設定の集合である。ビューを保存しておい
て、あとからそれを復元することで、開いていたテキストをまた同じように表示するこ
とができる。ウィンドウに関連したオプションやマッピングも復元されるので、ビュー
を保存したときと同じ状態で作業を再開することができる。
Session session-file
セッションとは、全てのウィンドウのビューとグローバルな設定のことである。セッ
ションを保存しておいて、あとからそれを復元することで、各ウィンドウのレイアウト
を元に戻すことができる。セッションを利用してすばやくプロジェクト(作業単位)を切
り替えることが可能で、そのプロジェクトで開いていたファイルを自動的に開くことが
できる。
ビューとセッションはviminfoファイルを拡張した便利な機能である。ビューとセッ
ションをviminfoファイル(viminfo-file)と併用することで全ての情報を記録するこ
とができる。
保存しておいたビューやセッションを素早く再開するには引数-Sを使う:
これら全ては {+mksessionが有効な場合のみ利用可能}
:mks :mksession
:mks[ession][!] [file] 現在のセッションを復元するための Vim script を作成す
る。
[!]を付けたときはファイルを上書保存する。
[file]を省略したときは "Session.vim" に保存する。
":mksession" の出力は ":mkvimrc" の出力に似ているが、さらにいくつかのコマンド
が追加されている。どのコマンドが出力されるかはオプション 'sessionoptions' に依
存する。保存したファイルは、コマンド ":source" で実行すると次の効果がある:
1. 'sessionoptions' に "options" が含まれているときは、グローバルなマッピング
とオプションを復元する。スクリプトローカルなマッピングは復元されない。
2. 'sessionoptions' に "globals" が含まれているときは、大文字で始まって1つ以上
の小文字を含む名前を持ったグローバルな変数を復元する。
3. 現在のタブページにあるカレント以外の全ウィンドウを閉じる。現在のタブページ
を除いた全タブページを閉じる(この結果現在ロードされているバッファはアンロー
ドされ、隠しバッファになるかは 'hidden' が設定されているかそうでないかによ
る)。カレントのバッファが空で名前無しなら削除する。
4. 'sessionoptions' に "curdir" が含まれているときは、カレントディレクトリを復
元する。あるいは、'sessionoptions' に "sesdir" が含まれているときは、カレン
トディレクトリをセッションファイルが保存されているディレクトリに変更する。
5. 'sessionoptions' に "winpos" が含まれているときは、GUIウィンドウの位置を復
元する。
6. 'sessionoptions' に "resize" が含まれているときは、スクリーンのサイズを復元
する。
7. 'sessionoptions' に "buffers" が含まれているときは、バッファリストと各バッ
ファにおけるカーソルの位置を復元する。隠れ(hidden)バッファや開放済み
(unloaded)バッファも含めて、全てのバッファを復元する。"buffers" が含まれて
いないときは、ウィンドウに表示されているバッファのみが復元される。
8. 全てのウィンドウとそのレイアウトを復元する。'sessionoptions' に "help" が含
まれているときは、ヘルプウィンドウも復元する。'sessionoptions' に "blank"
が含まれているときは、無名のバッファを編集していたウィンドウも復元する。
'sessionoptions' に "winsize" が含まれていて、ヘルプウィンドウや無名バッファ
のウィンドウが除外されていないときは、ウィンドウのサイズも復元する(スクリー
ンサイズに比例する)。"winsize" が含まれていないときは、ウィンドウは妥当なサ
イズになる。
9. 各ウィンドウのビューを:mkviewの機能と同じように復元する。しかし
'viewoptions' ではなく 'sessionoptions' が使われる。
10. セッションファイルと同じ名前で最後が "x.vim" (eXtraのx)という名前のファイ
ルがあればそのファイルを実行する。この仕組を使ってセッションに関連した処理
や設定、例えばGUIのメニューを作成するなど、を行うことができる。
{訳注:セッションファイルがSESSION.vimならSESSIONx.vimが実行される。}
セッションを復元すると、内部変数の "v:this_session" (this_session-variable)
を使って現在のセッションの名前(フルパス)を利用できる。
それを利用したマッピングの例:
'sessionoptions' から "tabpages" が除かれていない限り、セッションはすべてのタ
ブページを含む。tab-page
セッションファイルが読み込まれると、自動コマンドイベント SessionLoadPost が
発生する。
SessionLoad-variable
セッションファイルを読み込んでいる間、グローバル変数 SessionLoad は 1 になる。
プラグインはこれを使ってイベント SessionLoadPost が発生するまで、なんらかの作
業を後回しにすることができる。
:mkvie :mkview
:mkvie[w][!] [file] 現在のウィンドウの状態を復元するための Vim script を作
成する。
[!]を付けたときはファイルを上書保存する。
[file] を省略したり、1から9の数字を指定したときは、
'viewdir' に指定されたディレクトリに適切な名前で保存さ
れる。'viewdir' の最後に指定されたパスが存在しないとき
にはそのディレクトリも作成される。例えば、'viewdir' が
"$VIM/vimfiles/view" なら "$VIM/vimfiles" の中に
"view" が作成される。
[file]を省略、もしくは数字を指定した場合は、常に上書き
保存される。ビューを復元するときには :loadview を使
用する。
[file]にファイル名を指定すると、編集を再開するためのコ
マンドがそのファイルに保存される(この場合は 'viewdir'
は使われない)。
":mkview" の出力は次の項目を含んでいる:
1. ウィンドウで使用している引数リストを復元する。グローバルな引数リストを使っ
ているときにはそれが使用される。
引数リストのインデックスも復元される。
2. ウィンドウで編集していたファイルを開く。編集していたファイルがなければ、空
のウィンドウが作成される。
3. 'viewoptions' が "options" か "localoptions" を含んでいるときは、その
バッファやウィンドウに特有な(ローカルな)、マッピング、短縮(abbreviations)、
オプション、を復元する。
セッションの一部としてビューを保存するときに、'sessionoptions' に "options"
が含まれているときは、オプションのグローバルな値とローカルな値が両方保存さ
れる。
4. 'viewoptions' が "folds" を含んでいるときは、手作業で設定した折り畳みを復元
する。折り畳みの開閉状態も復元する。
5. ファイルにおけるカーソルとスクロールの位置を復元する。閉じた折り畳みがある
とうまく機能しない。
6. ローカルなカレントディレクトリを復元する。グローバルなカレントディレクトリ
と違っている場合、かつ 'viewoptions' が "curdir" を含んでいる場合のみ。
{訳注: current-directory}
Note: ビューとセッションは完璧ではない:
- 全てを復元するわけではない。例えば、関数、自動コマンド、":syntax on"、などは
含まれない。レジスタやコマンドラインの履歴などは、ビューやセッションではな
く、viminfoに保存される。
- グローバルなオプションの設定は、その値を初期設定から変更していた場合のみ保存
される。現在の設定が初期設定とは違うときにセッションを復元しても、初期設定に
は戻らない。しかしながら、ローカルなオプションは初期設定に戻される。
- 既存のマッピングは警告なく上書きされる。そのようなときはよく分からないエラー
が発生するだろう。
- 手動で設定した折り畳みや、その開閉状態を復元すると表示が乱れることがある。
それはビューを保存してから復元する間に、編集していたファイルを変更した場合で
ある。
- Vim script はまったくもって効率的ではない。しかしそうは言っても、自分でコ
マンドを再入力するよりは断然早い。
:lo :loadview
:lo[adview] [nr] 編集中のファイルに関連したビューを読み込む。 [nr]を省
略すると、":mkview" で保存したビューが読み込まれる。
[nr]を付けた場合は、":mkview [nr]" で保存したビューが
読み込まれる。
":mkview" と ":loadview" の組は、1つのファイルに対して全部で10個のビューを管理
できる。ビューは 'viewdir' で指定したディレクトリに保存される。ビューはファイ
ル名を利用して管理されている。そのため、ファイルの名前を変更したり、(シンボリッ
ク)リンクファイルを使ってアクセスした場合は、対応するビューを見つけることがで
きない。
たまには 'viewdir' をきれいに掃除するといいだろう。
*.cファイルを編集するときにビューを自動的に保存、復元するには:
==============================================================================
10. viminfoファイル viminfo viminfo-file E136
E575 E576 E577
いったんVimを終了させ、後に再び起動する時には、通常多くの情報が失われてしま
う。viminfoファイルは終了する時の情報を保存しておくのに使用され、それにより再
起動した時には同じ状態で編集セッションを続けることができる。
ユーザーマニュアルの21.3で簡単に紹介されている。
viminfoファイルにはこんなものを記憶できる:
- コマンドラインの履歴
- 検索文字列の履歴
- 入力(input())の履歴
- レジスタの内容
- 複数のファイルのマーク
- ファイルの中の位置を指し示すマーク
- 最後の検索/置換パターン('n' と '&' のため)
- バッファのリスト
- グローバル変数
コンパイル時に+viminfo機能が無効にされていたら、viminfoファイルはサポートさ
れない。
セッションファイルも使用することができる。viminfoファイルは「している仕事」に
依存しない、という点で異なる。通常viminfoファイルは一つしか存在しない。セッ
ションファイルは、ある特定の編集作業の状態を保存するのに使う。セッションファイ
ルは、作業しているプロジェクト毎に複数作成することが可能である。Viminfoもセッ
ションファイルどちらも、Vimをスタートしてすぐに好みの設定を行うという目的のた
めに、効果的に使用できる。 session-file
viminfo-read
Vimが起動した時に 'viminfo' オプションが空でなかったら、viminfoファイルが読み
込まれ、その情報は適切に使用される。変数 v:oldfiles がセットされる。起動時に
はマークは読み込まれない(しかしファイルマークは読み込まれる)。起動時に
'viminfo' オプションをどうやって設定するのかはinitializationを参照。
viminfo-write
Vimが終了する時に 'viminfo' が空でなかったら、情報がviminfoファイルに保存され
る(もし既に存在した場合には、それと合併(マージ)される)。'viminfo' オプション
は、どのような情報を保存するか、またどのくらいの量を保存するべきかその限界を指
定する為の情報を含む文字列である。('viminfo' 参照)。
マージは2つの方法で実施される。Vimのセッション中で変更や {訳注: あらたに} 設定
された大半のアイテムは保存され、変更されなかったものは既存のviminfoファイルの
ものが流用される。例えば:
- VimセッションAが、変数 START の含まれた viminfo を読み込む。
- VimセッションBが、同様にviminfoを読み込む
- VimセッションAが、変数 AAA と BOTH を設定し終了する
- VimセッションBが、変数 BBB と BOTH を設定し終了する
こうするとviminfoは次のようになるだろう:
START - 元からviminfoにあったものは、セッションA及びBに拠らず維持される
AAA - セッションA由来の値は、Bにより維持される
BBB - セッションB由来の値
BOTH - セッションB由来の値。Aの値は失われる。
viminfo-timestamp
幾つかのアイテムには、最後に変更された値を優先するために、タイムスタンプを用い
ている。これによりVimセッションの終了順序に関係なく、最新のアイテムが維持され
る。タイムスタンプは以下のアイテムに導入されている:
- コマンドラインの履歴
- 検索文字列の履歴
- 入力行の履歴
- 空ではないレジスタの値
- ジャンプリスト
- ファイルのマーク
このタイムスタンプ機能自体は Vim 8.0 よりも以前に追加された。Vim 7.4.1131 以降
の Vim 7.4 では各アイテムにタイムスタンプを記録しているが、使ってはいない。そ
のため古いVimと新しいVimを混在して使う場合には、常に新しいデータが維持される。
Note: Unixにおける注意点:
- viminfoファイルには入力したテキストや、使用したコマンドが記載されているの
で、他人に覗かれないように保護(パーミッション設定)したほうが良い。
- 複数のユーザーでviminfoファイルを共有したい時(例えば他のユーザーへ "su" する
時など)には、グループもしくは全員にviminfoファイルへの書き込み権限を与えるこ
とができる。Vimはそのviminfoファイルを置き換えるときに権限を維持する。しか
し、あなたのviminfoファイルを誰にでも読ませたり書かせたりしないように注意す
ること!
- 現在の "本当" のユーザーによって書き込み不能なviminfoファイルは、Vimは決して
上書きしない。これは "su" でrootユーザーになった時、しかし$HOMEがまだ通常ユー
ザーのホームディレクトリのままの時の助けとなる。そうでないとVimはroot所有の、
他の誰にも読めないviminfoファイルを作成してしまう。
- viminfo ファイルはシンボリックリンクであってはならない。セキュリティ上の問題
を避けるためである。
マークは個々のファイルに対して別々に保存される。ファイルが読み込まれ 'viminfo'
が空でない場合、viminfoファイルからマーク情報が読み込まれる。NOTE: マークはVim
が正常に終了したときにだけ保存される。また、Vimの起動中に開かれた ":bdel" され
ていないファイル全てのマークが記録される。もしも ":bdel" で破棄したファイルに
ついてマークを保存しておきたいのならば、":wv" を使う。'[' と ']' のマークは保
存されないが、'"' は保存される。'"' マークはファイルを開いたときに前回のカーソ
ル位置を復元するのに非常に便利である。'viminfo' に文字 "r" が与えられた時には、
一切のマーク情報は記録されない。これはリムーバブルメディア上のファイルのマーク
が保存されるのを避ける場合に使う(MS-Windowsでは "ra:,rb:" を、Amigaでは
"rdf0:,rdf1:,rdf2:" を使うことになるだろう)。viminfo ファイルにマークが記録さ
れているファイルの名前が v:oldfiles のリストに追加される。
viminfo-file-marks
大文字のマーク ('A から 'Z) はviminfoファイルが書かれるときに、保存される。数
字のマーク ('0 から '9) はちょっと特別である。viminfoファイルが書き込まれる時
(終了時、もしくは ":wviminfo" コマンド実行時)に、'0 が現在のファイルの現在の
カーソル位置に設定される。古い '0 は '1 になり、'1 は '2 になり、以下同様。"1
から "9 の削除レジスタに起こることに似ている。'0 に記憶する位置が '1 から '9
に既出であった時には、同じ位置が2度記憶されるのではなく、そのレジスタが '0 に
浮き上がってくる。結果として "'0" を使用すると、最後にVimを終了した時のファイ
ルとその行に戻ることができる。起動後直ちにそれを行うには、次のコマンドを試す:
csh 互換なシェルではエイリアスをこんな風に使用して:
bash ライクなシェルでは:
特定のファイルのマークを保存しないようにするには 'viminfo' に "r" フラグを追加
する。
Viminfoファイルの名前 viminfo-file-name
- viminfoファイルの名前を特に指定しない時は、Unixでは "$HOME/.viminfo" に、
Amigaでは "s:.viminfo" に、Win32では "$HOME\_viminfo" になる。Win32で、$HOME
が設定されていない時には、"$VIM\_viminfo" になる。$VIM も設定されていない時
には "c:\_viminfo" が使われる。
- 'viminfo' オプションの 'n' フラグは、別の名前のviminfoファイルを使うために、
そのファイル名を指定するのに使用される'viminfo'。
- Vimの起動引数 "-i" も、viminfoとして別のファイルを指定するのに使用できる-i。
ファイル名として "NONE" (全て大文字)が与えられると、viminfoファイルは使用(読
み込みも書き込みも)されない。
- 'viminfofile' オプションは "-i" 引数のように使うことができる。実際、"-i" 引
数の値は 'viminfofile' オプションに格納される。
- 起動後に、コマンドで別の名前を与えると、デフォルト名や 'viminfo' や "-i" で
与えた名前を上書きすることができる("-i" はNONEが指定されていない時に限る)。
文字エンコーディング viminfo-encoding
viminfoファイルのテキストはオプション 'encoding' で指定したエンコーディングで
保存される。通常は 'encoding' の設定はいつも同じなので、問題なく機能する。しか
しながら、もしもviminfoファイルを読み込むときに、'encoding' の設定がviminfoファ
イルを保存したときとは違うエンコーディングに設定されていると、いくつかのテキス
ト(ASCII以外の文字)は不正な文字になってしまう。それを回避するには、オプション
'viminfo' に 'c' フラグを追加する:
'encoding' へとテキストを変換する。これを利用するには+iconvが有効になってい
る必要がある。ファイル名は変換されない。
viminfoファイルを手動で読み書きする viminfo-read-write
viminfoファイルを手動で読み書きするのに2つのコマンドが用意されている。これは同
時に起動している複数のVim間で、レジスタの内容を交換するのに利用できる: まず片
方で ":wv" してから、もう片方で ":rv" する。既にレジスタに何かを記憶している場
合には、":rv!" する必要があることに注意。またこれを行うとコマンドラインの履歴
を含む全ての情報が、送り側のVimのもので上書きされてしまうことにも注意。
viminfoファイル自体を手で編集することもできるが、Vimによって作られる正しい
フォーマットのviminfoを元にすることを推奨する。一度試してみればどういう構造に
なっているかよく分かるだろう。これを覚えておけば、Vimを起動したときにいつでも
設定しておきたい内容を、"~/.my_viminfo" というようなファイルに用意しておくとき
に重宝する。例としては、あるデータをレジスタに予め読み込んでおくとか、コマンド
ライン履歴に特定のコマンドをいれるとか、そういう使い方がある。.vimrcファイルに
次の一行を入れておけば
プトだとか)、異なるviminfoを持ち、":autocmd" を組み合わせることでファイル名に
基づいたりしながら、それらを使用することもできる(:autocmd)参照。
viminfo-errors
Vimがviminfoファイルを読み込み中にエラーを検出すると、ファイルの上書きはされな
くなる。もしも10個以上のエラーがある場合には、それ以上viminfoファイルを読み込
むのを止める。こうするのはviminfoファイル内のファイル名が間違っている場合、突
発的にそのファイルを破壊してしまうのを避けるためである。これは "vim -R file"
としたいときに、誤って "vim -i file" とタイプしてしまうと起こり得る(そう、偶然
何人かが実際にそうしてしまったよ!!)。viminfoファイルにエラーがあったけれども
viminfoを上書きしたいのならば、エラーを修正するか、またはファイルを消すかのど
ちらかが必要(Vimの実行中は、ほとんどの情報が回復してしまう)。
:rv :rviminfo E195
:rv[iminfo][!] [file] viminfoファイルを [file](デフォルト:上記
viminfo-file-name 参照)から読込む。
[!]が与えれらた場合、既に設定されている情報(レジス
タ、マーク、v:oldfiles、その他)は上書きされる。
:wv :wviminfo E137 E138 E574 E886 E929
:wv[iminfo][!] [file] viminfoファイルを [file](デフォルト:上記
viminfo-file-name 参照)として保存する。
このコマンドは 'viminfofile' が "NONE" に設定されてい
る場合には効果がない。
まず既存のファイルの(古い)情報が読み込まれ、
Vim内部の(新しい)情報とマージ(合併)されてから、ファイ
ルに保存される。[!]を指定すると古い情報は読み込まれ
ず、Vim内部の情報だけが保存される。'viminfo' が空("")
に設定されている場合は、100個のファイルのマークが書き
出される。
"E929: Too many viminfo temp files" ("E929: 一時
viminfoファイルが多過ぎます!") というエラーが出たとき
には古い一時ファイル (例えば~/.viminf*) が残っていない
ことを確かめ、.viminfoファイルを保存するディレクトリの
書込み権限を確認すること。
:ol :oldfiles
:ol[dfiles] viminfo ファイルにマークが記録されているファイルのリス
トを表示する。起動時にこのリストが読み込まれ、
:rviminfo! を行った後でのみ変更される。v:oldfiles
も参照。このリストで表示される番号は c_#< で使うこと
ができる。
出力は :filter でフィルタリングできる。例:
{+eval 機能付きでコンパイルされたときのみ有効}
:bro[wse] ol[dfiles][!]
:oldfiles と同じようにファイルのリストを表示し、番号
の入力を待つ。有効な番号が入力されると、リスト中のその
ファイルを開く。
press-enter プロンプトが表示されたときは "q" を押す
とファイル番号を入力するプロンプトに戻れる。
! をつけると変更中のバッファを破棄する。abandon
{tiny または small でコンパイルされたときは利用できな
い}
vim:tw=78:ts=8:noet:ft=help:norl:
VIMリファレンスマニュアル by Bram Moolenaar
Vimの起動 starting
1. Vimの起動引数 vim-arguments
2. Amiga版のVim starting-amiga
3. eVimについて evim-keys
4. 初期化 initialization
5. $VIM と $VIMRUNTIME $VIM
6. サスペンド suspend
7. 終了 exiting
8. 設定の保存 save-settings
9. ビューとセッション views-sessions
10. viminfo ファイル viminfo-file
==============================================================================
1. Vimの起動引数 vim-arguments
たいていは1つのファイルを編集するために次のようなコマンドでVimを起動する
vim filename -vim
より一般的に言えば、Vimは次の書式で起動することができる:
vim [option | filename] ..
オプション引数とファイル引数は混在でき、幾つでも与える事ができる。しかし引数を
取るオプションには注意が必要である。
さまざまなViのバージョンとの互換性に付いてはcmdline-argumentsを参照。
正確には、以下の5つの項目から1つを選んで編集が開始される:
-file ---
filename 1つ以上のファイル名が与えられた場合。まずは最初の1つが編集ファ
イルとしてバッファに読み込まれる。カーソルはそのバッファの1行
目に置かれる。
'-' で始まるファイル名を指定するには、オプションと区別するため
に、引数に "--" を置く。例:
vim -- -filename
"--" の後の全ての引数はファイル名として解釈されるので、その他のオプションや引数 "+command" は使用することができない。
MS-Windows におけるクォートの動作については win32-quotes を
参照。
--
- この引数はExモードで起動するかどうかで意味が異なる。
ノーマルモードで起動する場合:
vim -
ex -v -
新しいバッファに、標準入力を読み込んで編集を始める。コマンドはex -v -
通常であれば標準入力から読み込まれるが、この場合代わりに標準エ
ラー出力から読み込まれる。例:
find . -name "*.c" -print | vim -
バッファに「変更(modified)」のマークが付けられるので、終了しよ
うとする時にテキストの保存するように指摘される。それが好ましく
ないなら、vimrc に以下の行を加える:
" 標準入力から読むときは 'modified' を設定しない
au StdinReadPost * set nomodified
au StdinReadPost * set nomodified
Exモードで起動する場合:
ex -
vim -e -
exim -
vim -E -
サイレントモードで起動する。-s-exを参照。vim -e -
exim -
vim -E -
-t -tag
-t {tag} タグを開く。{tag}がtagsファイルから検索され、関連づけられた
ファイルが現在のファイルとされ、関連づけられたコマンドが実行さ
れる。大抵これはCプログラムを編集するときに使用され、"tag" は
関数名である事が多い。それにより、その関数を含むファイルが自動
的に開かれ、カーソルがその関数の定義位置に設定される(tagsを
参照)。
-q -qf
-q [errorfile] quickfixモードで起動。 [errorfile]に指定したファイルが読み込ま
れ最初のエラーが表示される。quickfixを参照。
[errorfile]が与えられない場合、オプション 'errorfile' がファイ
ル名として使用される。省略値に関しては 'errorfile' を参照。
(nothing) 上記の4つのうち、どれも指定せずにVimを起動すると、新しいバッ
ファが用意される。それは名前のない空のバッファである。
起動時のモードはプログラム名を "vim" とは別の名前にすることで指定できる。それ
は次のようにオプションを与えたのと同じである:
ex vim -e Exモードで起動 (Ex-modeを参照)。 ex
exim vim -E 改良版Exモードで起動 (Ex-modeを参照)。 exim
(通常はインストールされない)
view vim -R 読み込み専用モードで起動 (-Rを参照)。 view
gvim vim -g GUIで起動 (guiを参照)。 gvim
gex vim -eg GUIのEXモードで起動。 gex
gview vim -Rg GUIの読み込み専用モードで起動。 gview
rvim vim -Z "vim" の制限モードで起動 (-Zを参照)。 rvim
rview vim -RZ "view" の制限モード。 rview
rgvim vim -gZ "gvim" の制限モード。 rgvim
rgview vim -RgZ "gview" の制限モード。 rgview
evim vim -y 簡易操作のVim (-yを参照) evim
eview vim -yR "evim" と同じ。読み込み専用モード。 eview
vimdiff vim -d 差分モードで起動diff-mode
gvimdiff vim -gd 差分モードで起動diff-mode
これらの別名の後ろに付けられる文字は無視される。たとえばGUIで起動するのに
"gvim-8" という名前を付けることができる。もちろんその名前で実行可能なファイル
がなければならない。
UNIXでは通常、Vimという名前の実行可能ファイルが一つあり、それに対して違う名前
のリンクが用意される。使用しているシステムがリンクをサポートせず、実行ファイル
のコピーを幾つも作りたくないのならば、リンクの代わりにエイリアスを使うこともで
きる。例:
alias view vim -R
alias gvim vim -g
alias gvim vim -g
startup-options
オプション引数はどんな順番で与えても良い。一文字のオプションは一つのダッシュ
(-)の後に組み合わせる。引数 "--" の後にはオプション引数を置くことはできない。
VMSでは全てのオプション引数は小文字であるとみなされる。大文字を指定するにはス
ラッシュを前に置く。つまり "-R" でリカバリモード、"-/R" で読み込み専用となる。
--help -h --help -?
-?
-h 使用法(ヘルプ)を表示して終了する。
そのテキストを保存するにはinfo-messageを参照。
--version
--version バージョン情報を表示して終了する。出力は:versionコマンドと一
緒。
そのテキストを保存するにはinfo-messageを参照。
--noplugin
--noplugin プラグインを読み込まない。'loadplugins' オプションをオフにす
る。
Note: -u引数でもプラグインを読み込まないようにできる:
引数 load: vimrcファイル プラグイン defaults.vim
なし yes yes yes
-u NONE no no no
-u DEFAULTS no no yes
-u NORC no yes no
--noplugin yes no yes
--startuptime {fname} --startuptime
起動処理の間、経過時間のメッセージをファイル {fname} に書き出
す。.vimrc やプラグインの読み込み、最初のファイルの読み込みに
おいて、どこで時間がかかっているかを調べるために役に立つ。
{fname} が既に存在するときはそのファイルに追記される。
{+startuptime 付きでコンパイルされたときのみ有効}
--literal
--literal ファイル名を文字どおり解釈する。ワイルドカードを展開しない。
Unixでは必要ない、Vimは常にファイル名を文字どおり解釈する(シェ
ルがワイルドカードを展開する)。
全てのファイル名に適用される。この引数の前に指定したものも同
じ。
-+
+[num] 最初に編集されるファイルの "num" 行目にカーソルを置いて開く。
"num" がなかった場合には、カーソルは最終行に置かれる。
-+/
+/{pat} 最初に編集されるファイルの、"pat" を含む最初の行にカーソルを置
いて起動する(指定可能な検索パターンについてはpatternを参
照)。検索はカーソル位置から開始される。カーソルの位置は最初の
行か、もしくは viminfo から復元された最後に使われた位置の場
合もある。必ず最初の行から検索したい場合は "+1 +/pat" を使う。
+{command} -+c -c
-c {command} 最初のファイルが読み込まれた後(加えてそのファイルに適用される
autocommandとmodelineが処理された後)に{command}が実行される。
"command" はExコマンドとして解釈される。"command" にスペースを
含んでいる場合には、ダブルクォートで挟まれている必要がある(こ
れは使われているシェルに依存する)。例:
vim "+set si" main.c
vim "+find stdio.h"
vim -c "set ff=dos" -c wq mine.mak
vim "+find stdio.h"
vim -c "set ff=dos" -c wq mine.mak
Note: Vimコマンドの引数として "+" か "-c" をあわせ、最大10個ま
で使うことができる。これらの引数は与えられた順番で実行される。
"-S" 引数は "-c" として同じように数える。
--cmd {command} --cmd
vimrcファイルを処理する前に{command}を実行する。それ以外は
-c {command} と同じである。"-c" 引数とは別に、10個まで使うこと
ができる。
-S
-S {file} 最初のファイルが読み込まれた後に{file}を実行する。これは次のも
のを簡単にしたものである:
-c "source {file}"
"-c" と混ぜて使うことができ、複数指定できる。"-c" と合わせて10個まで指定できる。
{file}の先頭文字には "-" は使えない。
作業をして Vim を終了するスクリプトを実行するのには使わない
こと、エラーメッセージが見えないだろう。代わりに -u を使うこ
と。
-S "-S Session.vim" と同じ。最後の引数として使われたときや、その
後に他のオプション引数が続いたときのみこのように解釈される。
-r
-r リカバリモード。ファイル名の引数なしで実行した場合には、存在す
るスワップファイルのリストが表示される。ファイルを指定すると、
クラッシュしたセッションを復活させるために、スワップファイルが
読み込まれる。crash-recoveryを参照。
-L
-L -rと同じ。
-R
-R 読み込み専用モード。オプション 'readonly' が、編集される全ての
ファイルに設定される。これにより、まだバッファを編集することは
できるが、偶然にファイルを上書きしてしまうようなことは防がれ
る。もしも、読み込み専用モードにいることを忘れてバッファへ変更
を行ったとしても、":w!" のようにExコマンドに「ビックリマーク」
を付けることで上書きすることが可能。'readonly' オプションは
":set noro" としてオフに設定することが可能である(オプションを
説明した章optionsを参照)。その後の編集は読み込み専用モードで
はなくなる。実行ファイルを "view" として起動した場合は、この-R
引数と同じ動作になる。オプション 'updatecount' は10000に設定さ
れ、これはスワップファイルがそう頻繁には自動更新されなくなると
いうことである。
変更を不許可とするには -M を参照。
-m
-m 変更を保存できなくする。オプション 'write' がオフに設定され、
ファイルを保存することができなくなる。オプション 'write' をオ
ンすれば、再び保存することが可能になる。
-M
-M 変更できないようにする。オプション 'modifiable' がオフに設定さ
れ、変更を加えることができなくなる。さらに、オプション 'write'
がオフに設定され、ファイルを保存することができなくなる。
'modifiable' と 'write' をオンにすれば、変更を加えて保存できる
ようになる。
-Z restricted-mode E145 E981
-Z 制限モード。外部シェルを実行するあらゆるコマンドの使用を許可
しない。これにはサスペンドであるCTRL-Zや、":sh"、フィルタリン
グ、system() 関数、バッククォートの評価、libcall() が含まれる。
delete()、rename()、mkdir()、job_start() なども許可されていな
い。
Python、Ruby、Luaなどのインターフェイスも、シェルコマンドの実
行に使用される可能性があるため無効になっている。PerlはSafeモ
ジュールを使用している。
Note ユーザーはまだシェルコマンドを実行する抜け穴を見つけるか
もしれない、それが困難になっただけである。
-g
-g VimをGUIモードで起動する。guiを参照。逆は-vを参照。
-v
-v ExをViモードで起動する。実行ファイルが "ex" や "gvim" である時
にだけ、違いが現れる。gvimでは可能ならば "GUI" ではないモード
で起動する。
-e
-e VimをExモードで起動するQ。実行ファイルの名前が "ex" 以外の時
に意味がある。
-E
-E Vimを改良版Exモードで起動するgQ。実行ファイルの名前が "exim"
以外の時に意味がある。
-s-ex
-s サイレント(もしくはバッチ)モード。Vimが "ex" で起動されるか、
このオプションよりも先に "-e" が付いていた場合にだけ働く。そう
でない場合には-sを参照。-sとして使うときには引数をとる。
端末の替わりにファイルからExコマンドを実行する場合に使用され
る。ほとんどのプロンプトとメッセージは抑制される。警告とエラー
のメッセージも抑制される。
次のコマンドの出力は標準出力へ表示される:
:list
:number
:set オプション値を表示するため。
'verbose' が0以外のときにはメッセージは抑制されずに標準エラー
出力へ表示される(デバッグ用)。
'term' と $TERM は考慮されない。
Vimが停止しているようだったら "qa!<Enter>" と入力してみてほし
い。Vimがユーザーの入力を待っているときでもプロンプトは表示さ
れない。
初期化処理はスキップされる(このオプションが引数 "-u" と一緒に
使われた場合は除く)。
例:
vim -e -s < thefilter thefile
逆に、スクリプトからのエラーを見るには、-u フラグを付けファイルを実行する:
vim -u thefilter thefile
-b
-b バイナリモード。ファイルを入出力する再に<NL>だけを行のセパレー
タとして認識するようになる。オプション 'expandtab' は無効化さ
れる。オプション 'textwidth' は0に設定される。'modeline' はオ
フに設定される。オプション 'binary' がオンに設定される。これは
vimrc/exrcのファイルが読み込まれた直後、引数で与えられたファイ
ルが読み込まれるよりも前に行われる。edit-binaryも参照。
-l
-l Lispモード。オプション 'lisp' と 'showmatch' をオンに設定する。
-A
-A アラビア語モード。オプション 'arabic' をオンに設定する。
{+arabic(これは+rightleftも含んでいる)が有効なときだけ使用
できる。そうでないときにはVimはエラーメッセージを出力して終了
する}
-F
-F これはFarsi(ペルシア語モード)で使用されていましたが、削除され
た。farsi.txt を参照。
-H
-H Hebrew(ヘブライ語)モード。オプション 'hkmap' と 'rightleft' を
オンに設定する。{+rightleftを有効にしてコンパイルした時にだ
け使用可。そうでない場合Vimはエラーメッセージを表示して終了す
る}
-V verbose
-V[N] 詳細表示する。オプション 'verbose' を[N]に設定する(Nを省略した
場合は10が設定される)。":source" が実行される度、viminfoの読み
書きを行う度に情報が表示される。Vimの起動時と終了時の動作を調
べるときに便利である。
例:
vim -V8 foobar
-V[N]{filename}
-V と同様で、さらに 'verbosefile' を {filename} に設定する。そ
の結果、メッセージは表示されずにファイル {filename} に書き出さ
れる。{filename} は数字で始まってはならない。
例:
vim -V20vimlog foobar
-D
-D デバッグする。スクリプトの最初のコマンドを実行するところからデ
バッグを開始する。debug-mode
{+evalが有効な場合のみ利用可能}
-C
-C 互換モード。オプション 'compatible' をオンに設定する。.vimrc
ファイルが存在する場合にもViとの互換性を得ることができる。プラ
グインや起動時スクリプトで ":set nocompatible" とするとこのオ
プションより優先されるため、起動後には 'nocompatible'になって
しまうだろう。どこで最後に設定されたかを調べるには次のコマンド
を使う:
:verbose set compatible?
'compatible' がオンになっていると動かないプラグインもある。起動処理の後でこれをセットするにはこのようにする:
vim "+set cp" filename
compatible-default も参照。-N
-N 非互換モード。オプション 'compatible' をオフに設定する。
.vimrc ファイルがないときや、"-u NONE" としているときに、
'nocompatible' (Vimの拡張を有効) にすることができる。
compatible-defaultも参照。
-y easy
-y 簡易モード。evimやeviewと同じ。'insertmode' をオンに設定し
て起動し、モードレスエディタのように振舞う。このスイッチを指定
すると、$VIMRUNTIME/evim.vimが自動的に読み込まれ、一般的なエ
ディタと同じ操作ができるようなマッピングが設定される。
evim-keysを参照。利用可能ならGUIが使用される。
-n
-n スワップファイルを使用しない。クラッシュしたときに編集していた
ファイルを復旧することはできなくなる。フロッピーディスクのよう
な非常に低速なメディアのファイルを読んだり編集したいときに有用
である。":set updatecount=0" と設定するのと同じである。オプ
ション 'updatecount' に0より大きい値を設定することで、スワップ
ファイルの使用を有効にすることができる。例、":set uc=100"。
NOTE: -n と -b を合わせて -nb としないこと。-nb には別の意味が
ある: -nb
vimrc ファイルの実行解釈の直後で、GUIが初期化される前に
'updatecount' が0に設定される。よって vimrc ファイルの中で
'updatecount' を設定しても上書きされてしまうが、gvimrcでの設定
は上書きされない。startupを参照。ディスクへのアクセスを減ら
したいのならば(ノートPCを使用している場合など)、"-n" を使用す
る替わりに、'updatetime' を設定し、'updatecount' に非常に大き
い値を設定して、編集中のファイルを保存する時に ":preserve" を
利用すると良い。この方法だとクラッシュからの復旧の可能性を保て
る。
-o
-o[N] N個のウィンドウを水平分割して開く。[N]が与えられない場合には、
引数で指定された全てのファイルに対して1個のウィンドウが開かれ
る。画面に十分な広さがない場合には、始めのほうの数個のファイル
だけがウィンドウを伴って表示される。逆にファイルの数よりもウィ
ンドウの数が多く指定された場合、多い分のウィンドウは空ファイル
の編集用として開かれる。
-O
-O[N] N個のウィンドウを垂直分割して開く。それ以外は-oと同じ。
-oと-Oが両方指定されたときは最後に指定された方を使用する。
-p
-p[N] N 個のタブページを開く。[N] が省略されると、引数として与えられ
た各ファイルに対し1つずつタブページを開く。最大値は
'tabpagemax' ページ(既定値は 10)である。引数よりも多くのタブペー
ジが作られる場合は、最後の数個のタブページは空ファイルを開く。
tabpage も参照。
-T
-T {terminal} 端末の種類を "terminal" に設定する。これはVimがユーザーの端末
へ送るコードに影響を与える。Vimはユーザーが使用している端末の
種類を自分で判断することができるので、通常これは必要がない
(terminal-infoを参照)。
--not-a-term
--not-a-term 入力と出力(もしくはどちらか一方)が端末に接続されていないこと
を、ユーザーが把握しているということをVimに伝える。これにより
警告が表示され2秒間の遅延が発生するのを避けられる。
"Reading from stdin..." のメッセージを避けることもできる。
"N files to edit" のメッセージを避けることもできる。
--ttyfail
--ttyfail 標準入力か標準出力が端末(tty)でない場合、すぐに終了する。
-d
-d 差分モードで起動する。vimdiffと同じ。
{+diffが有効な場合のみ利用可能}
-d {device} Amiga専用機能。+diffが無効な場合のみ利用可能。-devと同じよ
うに機能する。
-dev
-d {device} Amiga専用機能: {device}が編集用に開かれる。
普通、ウィンドウの位置とサイズを設定するために
"-d con:x/y/width/height" の形式で指定する。例、
"-d con:30/10/600/150"。しかしその他のAUX:のようなデバイスの編
集を開始することにも使用できる。
-f
-f GUI: Vimを起動したプログラム(プロセス)から独立しない。
'f' は "foreground" を意味する。省略すると、GUI版のVimは新しい
プロセスへforkして、現在のプロセスは終了してしまう。gvimの編集
セッションが終わるのを待つプログラム(メールソフトやニュースリー
ダーなど)には、"-f" を使うべきだろう。gvimがforkしないようにす
るには、自分の .gvimrc の中で 'guioptions' に 'f' を加えれば良
い。
Note: "-gf" でGUIをフォアグラウンドで実行開始できるが、"-fg"
だと前景色の設定になってしまう。gui-fork参照。
Amiga: Vimを新しいウィンドウで起動しない。編集作業が終わるのを
待つプログラム(メールソフトやニュースリーダー)によって Vimが起
動される時に、このオプションは使用される。amiga-windowを参照。
MS-Windows: このオプションはサポートされない。vim.bat や
gvim.bat 経由で起動した場合は機能する。
--nofork
--nofork GUI: forkしない。-fと同じ。
-u E282
-u {vimrc} 初期化のためにファイル{vimrc}が読込まれる。その他の初期化はス
キップされる。initializationを参照。
これにより特殊なマッピングや設定をした、特殊なモードでVimを起
動することができる。これを簡単に使用するにはシェルのエイリア
スが使えるだろう。例:
alias vimc vim -u ~/.c_vimrc !*
autocommandを使うことも考慮すべきである。autocommandを参照。{vimrc}に "NONE" (全て大文字)が指定された時には、設定ファイル
や環境変数による初期化、.gvimrcによるGUIの初期化も含め、全て省
略される。プラグインも読み込まれない。
{vimrc}が "NORC" (全部大文字)のときは "NONE" と同じように処理
されるが、プラグインは読み込まれる。
{vimrc} が "DEFAULTS" (全部大文字) のときは "NONE" と同じよう
に処理されるが、defaults.vim スクリプトが読み込まれる。また
'nocompatible' が設定される。--clean も参照すること。
"DEFAULTS" 以外の引数と共に "-u" 引数を使用すると、副作用とし
てオプション 'compatible' がデフォルトでオンに設定される。これ
は予期せぬ動作を引き起こすかもしれない。'compatible' を参照。
-U E230
-U {gvimrc} GUIがスタートする時にファイル{gvimrc}が読込まれる。その他のGUI
初期化はスキップされる。{gvimrc}にNONEが指定された場合、初期化
ファイルは何も読込まれない。 gui-init
例外: システムのメニューファイルは常に読込まれる。
-i
-i {viminfo} デフォルトのviminfoの代わりにファイル{viminfo}を使用する。
"NONE" (全て大文字)が指定された場合には、'viminfo' が指定され
たり、":rv" や ":wv" が使われても、viminfoは読み書きともに使用
されない。viminfo-file参照。
--clean
--clean "-u DEFAULTS -U NONE -i NONE" に類似している:
- ファイルや環境変数からの初期化はスキップされる。
- 'runtimepath' および 'packpath' は、ホームディレクトリのエン
トリを除外するように設定されます (-u DEFAULTS では発生しませ
ん)。
- defaults.vim スクリプトが読み込まれる。これは
'nocompatible' を含む: Vim のデフォルトを使う。
- gvimrc スクリプトは読み込まれない。
- viminfo ファイルは読み書きされない。
Note 以降の "-u" 引数は "-u DEFAULTS" を上書きする。
-x
-x ファイルの読み書き時に暗号化を施す。暗号の鍵としてオプション
'key' に設定された値を使用する。全ての書き込みは、テキストに対
して鍵を使って暗号化を行ってから なされる。ファイルを読込む時
には、Vimは暗号化ファイルかチェックし、自動的に鍵を聞いてくる
ので、引数 '-x' は必要でない。encryption
-X
-X Xサーバーと通信しない。そうして、カレントウィンドウのタイトル
を取得したり、Xのクリップボードを使ったコピー/ペーストを使用し
たりしない。端末エミュレータでVimを使用するときにXサーバーとの
通信速度が遅い場合にそれを回避できる。
効果があるか確かめるには --startuptime を使ってみること。
UnixかVMSで+X11が有効な場合のみ意味がある。
特定の端末を使用するときだけ通信を無効にするには、オプション
'clipboard' を参照。
X11 Session Management Protocol (XSMP) の処理が組み込まれてい
る場合、その通信にも大きな延滞が生じるため、無効にする。
(例えばクライアントとサーバーが通信するため)あとからXサーバー
との通信をつなげるにはserverlist()関数を呼び出す。ただしXSMP
の処理は有効にならない。
-s
-s {scriptin} スクリプトファイル{scriptin}が読込まれる。ファイルの中のキャラ
クタは、全てユーザーがタイプしたものとして解釈される。エディタ
が終了する前にファイルの終端に達した場合、以降のキャラクタは
キーボードから読込まれる。Exモード動作時には働かない、-s-ex
を参照。complex-repeatも参照。
-w_nr
-w {number}
-w{number} オプション 'window' を {number} に設定する。
-w
-w {scriptout} Vimを終了するまで、ユーザーが入力した全部の文字が記録され、ファ
イル{scriptout}に書き出される。これは "vim -s" や ":source!"
で読込まれるスクリプトファイルを作成するのに役立つ。既にファイ
ル "scriptout" が存在する場合には、そのファイルに追加保存する。
complex-repeatも参照。
{scriptout} は数字で始まってはならない。
-W
-W {scriptout} -wに似ているが、アペンド(追加)せずに、既にあるファイルを上書き
する。
--remote [+{cmd}] {file} ...
サーバーとして機能している他のVimで{file}を開く。
この引数の前にファイルを指定することはできない。
--remoteを参照。
--remote-silent [+{cmd}] {file} ...
--remoteと同じ。ただしサーバーがなくてもメッセージを出さない。
--remote-silentを参照。
--remote-wait [+{cmd}] {file} ...
--remoteと同じ。ただしサーバーが終了するまで待機する。
--remote-waitを参照。
--remote-wait-silent [+{cmd}] {file} ...
--remote-waitと同じ。ただしサーバーがなくてもメッセージを出さ
ない。--remote-wait-silentを参照。
--servername {name}
Vimサーバーの名前を指定する。これは通信先のサーバー名、あるい
は起動するVimが使用する名前である。
--servernameを参照。
--remote-send {keys}
{keys}をVimサーバーに送り、終了する。
--remote-sendを参照。
--remote-expr {expr}
Vimサーバーで{expr}を評価し、その結果を標準出力に出力する。
--remote-exprを参照。
--serverlist
稼動しているVimサーバーの一覧を出力する。
--serverlistを参照。
--socketid {id} --socketid
GTK+ GUIのVimのみ。GtkPlugを使用し、別アプリケーションのウィン
ドウで起動するようにする。詳細はgui-gtk-socketidを参照。
--windowid {id} --windowid
Win32 GUI の Vim のみ。ウィンドウ {id} を親ウィンドウにしよう
と試みる。成功するとそのウィンドウの内側で起動する。詳しくは
gui-w32-windowid を参照。
--echo-wid --echo-wid
GTK+ GUIのVimのみ。ウィンドウのIDを標準出力に出力する。この値
はgvimをkpartウィジェットに埋め込むのに使用できる。出力の書式
は:
WID: 12345\n
--role {role} --role
GTK+ 2 GUIのみ。メインウィンドウの役割(role)を{role}に設定す
る。ウィンドウの役割はウィンドウマネージャーがウィンドウを識
別して、ウィンドウの位置等を復元するのに使われる。この引数は
ログイン時にセッションを復元するときに自動的に使用される。
gui-gnome-sessionを参照。
-P {parent-title} -P MDI E671 E672
Win32のみ。親になるアプリケーションのタイトルを指定する。可能
であればVimはそのMDIアプリケーションのウィンドウ内で起動する。
{parent-title}が親アプリケーションのウィンドウのタイトルに使わ
れていて、明確に区別できる必要がある。
Note: まだ簡単に実装されているだけである。全てのアプリケーショ
ンで動くわけではない。メニューは機能しない。
-nb -nb
-nb={fname}
-nb:{hostname}:{addr}:{password}
Netbeansと接続し、エディタサーバーになる。2番目の型は接続情報
を格納したファイルを指定する。3番目の型はNetbeansに接続するた
めのホスト名、アドレス、パスワードを指定する。netbeans-run
{+netbeans_intg 機能つきでコンパイルされたときのみ有効; もし
そうでなければ、-nb は Vim を終了させる}
実行ファイルが "view" だったならば、Vimは読込み専用モードで起動する。"view" か
ら "vim" へハードリンクかシンボリックリンクを作成すると便利だろう。"vim -R" と
することでも読込み専用モードで起動できる。
実行ファイルの名前が "ex" ならば、VimはExモードで起動する。これは ":" コマンド
だけしか使えないことを意味している。しかし引数 "-v" が与えられれば、Vimは常に
ノーマルモードで起動する。
unix互換のシステムでX11 GUIサポートが有効ならさらに多くの引数が利用可能であ
る。gui-resourcesを参照。
==============================================================================
2. Amiga版のVim starting-amiga
VimをWorkbenchから起動する workbench
--------------------------
Workbench上でアイコンを2度クリックすればVimを起動することができる。そうすると
空のバッファで起動するだろう。
"Project" アイコンを使用することで、1つ以上のファイルを開くことができる。アイ
コンの "Default Tool" にはVimの実行ファイルの完全なパスを設定し、".info" ファ
イルの名前には、編集するテキストファイルの名前を設定する。このアイコンを2度ク
リックすると、Vimが起動してそのファイルを開く(そのファイルがあれば)。シフトキー
を押しながらアイコンをクリックし、最後のファイルを2度クリックすることで、複数
のファイルを開くことができる。これら全てのアイコンの "Default Tool" は同じでな
ければならない。
Workbenchからではファイル名以外の引数は、Vimへ与えることができない。
Vimウィンドウ amiga-window
-------------
Vimは起動されたCLIウィンドウの中で動作する。Vimが "run" や "runback" コマンド、
あるいやWorkbenchから起動された場合には、自分自身でウィンドウを開く。
技術的詳細:
新しいウィンドウを開くためにちょっとしたトリックを使う。Vimは普通のCLI
ウィンドウの中で起動されていないことを検出するとすぐに、"t:" にあるス
クリプトファイルを作成する。このスクリプトファイルにはVimを起動したの
と同じコマンドに加えて "endcli" コマンドが含まれている。このスクリプト
ファイルは "newcli" コマンドと一緒に実行される (これが行われる時には
"c:run" と "c:newcli" コマンドが必要)。スクリプトファイルはリブートす
るか、手動で消すまで存在しつづける。この方法は ":sh" と ":!" コマンド
が正しく機能する必要がある。しかしVimが-fオプション(フォアグラウンド
モード)で起動された時には、この方法は使われない。Vimを-fオプションで起
動した時には、その終了を待つからである。スクリプトのトリックを使うと、
Vimを呼び出したプログラムはその終了を知ることができない。オプション-f
はメールプログラムなど編集のセッションが終わったことを 検出したい場合
に、Vimを起動する方法として使用される。だからオプション-fが指定された
時には、":sh" と ":!" コマンドは使用することができない。
Vimは自動的にウィンドウのサイズを認識して対応する。Amiga DOS 1.3の元では、表示
の更新速度を上げるために、fastfontsのプログラム "FF" の支援を受けて動作する。
==============================================================================
3. eVimについて evim-keys
EVimはVimをモードレスエディタとして実行する。これはViらしくない発想ではある
が、Vimの操作方法を覚えられるほどには使用しない人の助けになる。ノーマルモード
のコマンドを覚えることで編集作業がより簡単になるということを利用者が感付いてく
れれば幸いである。
Evimでは以下のオプションが標準設定から変更される:
:set nocompatible ViにはないVim独自の機能を使う
:set insertmode 常時挿入モードを使用する
:set hidden 非表示になったバッファを開放しない
:set backup バックアップファイルを消さない(VMS以外)
:set backspace=2 どこでもバックスペースを使用できるようにする
:set autoindent 新しい行を入力するときに自動的にインデントする
:set history=50 Exコマンドの使用履歴を50回前まで記録する
:set ruler カーソルの位置を表示する
:set incsearch 検索時、入力途中にマッチ箇所を表示する
:set mouse=a 全てのモードでマウスを使う
:set hlsearch 検索した文字を強調表示する
:set whichwrap+=<,>,[,] <Left>と<Right>を使った左右の移動で行を跨ぐ
:set guioptions-=a 非Unixのみ。選択時に自動的にコピーしない
キーマッピング:
<Down> 実際の行ではなく表示された行の単位で移動する
<Up> 同上
Q "gq" コマンドで文章整形する。
<BS> ビジュアルモードで選択範囲を削除する
CTRL-X ビジュアルモードで選択範囲を切り取ってクリップボードに
コピーする
<S-Del> 同上
CTRL-C ビジュアルモードで選択範囲をクリップボードにコピーする
<C-Insert> 同上
CTRL-V クリップボードから貼り付ける(どのモードでも)
<S-Insert> 同上
CTRL-Q 本来のCTRL-Vの機能
CTRL-Z 元に戻す(undo)
CTRL-Y やり直し(redo)
<M-Space> システムメニューを表示
CTRL-A 全てを選択する
<C-Tab> 次のウィンドウへ。CTRL-W w と同じ
<C-F4> ウィンドウを閉じる。CTRL-W c と同じ
追記:
- ":behave mswin" が使用される:behave
- 構文強調表示が有効になる
- ファイルタイプ別の機能が有効になる。ファイルタイプ用のプラグインやインデント
が使用される。
- テキストファイルでは 'textwidth' が78に設定される
ヒント: ノーマルモードのコマンドを連続して使用するにはCTRL-Lを使用する。
i_CTRL-L
==============================================================================
4. 初期化 initialization startup
このセクションはVimの非GUIバージョンについて書く。GUIをスタートさせた時の追加
の初期化はgui-forkを参照。
スタート時に、Vimは環境変数とファイルを調べ、然るべく値を設定する。Vimはこの順
序で取り掛かる。
1. オプション 'shell' と 'term' を設定する SHELL COMSPEC TERM
環境変数SHELLが存在するならば、オプション 'shell' を設定するのに使われ
る。Win32ではSHELLが設定されていない場合COMSPECの値が使用される。
環境変数TERMが存在するならば、オプション 'term' を設定するのに使われ
る。しかし、後で GUI を開始するときに 'term' は変更される(下のステップ
8を参照。
2. 引数を処理する
Vimを起動するときに指定したオプション引数やファイル名を調べる。指定さ
れたファイルのバッファを作成する(まだ読み込まない)。
引数 -V を使うと、初期化処理のデバッグ用にこれ以降で起こることを表示
したりログに書き出したりできる。
3. 環境変数とファイルのExコマンドを実行する
環境変数の値は一つのExコマンドラインとして読まれるので、複数のコマンド
を実行したい時には '|' か "<NL>" で区切る必要がある。
vimrc exrc
"vimrc" ファイルは初期化コマンドを含んだファイルである。vimrcファイル
は一行ずつExコマンドとして実行される。"exrc" とほぼ等価である。それら
は同じタイプのファイルであるが、"exrc" が常にViによって使われるのに対
して、"vimrc" はVim特有のものである。vimrc-introも参照。
個人の初期化ファイルの配置場所:
Unix $HOME/.vimrc、$HOME/.vim/vimrc
MS-Windows $HOME/_vimrc、$HOME/vimfiles/vimrc、
$VIM/_vimrc
Amiga s:.vimrc、home:.vimrc、home:vimfiles:vimrc、
$VIM/.vimrc
Haiku $HOME/config/settings/vim/vimrc
初期化ファイルは上記の順に検索され、最初に見つかったものだけが読み込ま
れる。
推奨: Vimの設定ファイルは全て $HOME/.vim/ ディレクトリ(MS-Windowsでは
$HOME/vimfiles/)に置くこと。そうすれば設定ファイルを別のシステムにコ
ピーするのが容易になる。
Vimが "-u filename" で起動された場合、デフォルトのvimrcの代わりに
"filename" が使われる。続く初期化処理の4.までがスキップされる。
$MYVIMRC は設定されない。
"vim -u NORC" によりファイルを読み込むことなくこれらの初期化を省略する
ことができる。"vim -u NONE" を使用するとさらにプラグインも読み込まな
い。-u
起動引数 "-s" によりVimがExモードで起動されたならば、続く4.までの初期
化処理がスキップされる。オプション "-u" だけが処理される。
evim.vim
a. Vimをevimやeviewとして、あるいは-y引数を指定して起動すると
$VIMRUNTIME/evim.vimが実行される。
system-vimrc
b. Unix、MS-Windows、VMS、Macintosh、そしてAmigaでは、システムのvimrcファ
イルが初期化のために読み込まれる。このファイルのパスは ":version" コマ
ンドによって確認できる。普通は "$VIM/vimrc" である。Note: このファイル
は 'compatible' モードであっても読み込まれる。'compatible' の自動リセッ
トはこれが終わった後に行われることになっている。必要ならば ":set nocp"
コマンドを追加する。Macintosh では $VIMRUNTIME/macmap.vim が読み込まれ
る。
VIMINIT .vimrc _vimrc EXINIT .exrc _exrc $MYVIMRC
c. 初期化のために5つの場所が検索される。最初に見つかったものが使用され、
残りは無視される。ここまでで環境変数 $MYVIMRC が設定されていなく、
VIMINIT を使っていないなら、$MYVIMRC に最初にみつかったファイルが設定
される。
I 環境変数VIMINIT(compatible-defaultも参照) (*)
その内容はExコマンドとして解釈される。
II ユーザーvimrcファイル:
"$HOME/.vimrc" (for Unix) (*)
"$HOME/.vim/vimrc" (for Unix) (*)
"s:.vimrc" (for Amiga) (*)
"home:.vimrc" (for Amiga) (*)
"home:vimfiles:vimrc" (for Amiga) (*)
"$VIM/.vimrc" (for Amiga) (*)
"$HOME/_vimrc" (for Win32) (*)
"$HOME/vimfiles/vimrc" (for Win32) (*)
"$VIM/_vimrc" (for Win32) (*)
"$HOME/config/settings/vim/vimrc" (for Haiku) (*)
Note: UnixとAmigaでは、".vimrc" がなかった場合には、MS-DOS互換
のファイルシステムを使用することを考え、"_vimrc" も試みられる。
MS-Windowsでは "_vimrc" を探したあとで、ロングファイルネームが
使われる場合は ".vimrc" が探される。
Note: Win32では "$HOME" がまず検査される。"_vimrc" と ".vimrc"
のどちらもない場合には、"$VIM" が調べられる。$VIMが設定されて
いない場合については$VIM参照。
III 環境変数EXINIT。
その内容はExコマンドとして解釈される。
IV ユーザーのexrcファイル。vimrcと同じだが、vimrcがexrcによって置き換
えられている。しかし ".exrc" と "_exrc" のどちらか1つだけが使われ
る。これはシステムによる。(*)の注釈は適用されない。
V デフォルトの $VIMRUNTIME/defaults.vim を読み込む。これは、大半の新
規ユーザーが必要するであろう各種オプションを設定し、"syntax on" 及
び "filetype on" コマンドを含んでいる。defaults.vim を参照。
d. 'exrc' オプションがオン(初期状態ではオフ)の場合、現在のディレクトリで3
つのファイルが検索される。最初に見つかったものだけが使用され、残りは無
視される。
- The file ".vimrc" (for Unix, Amiga) (*)
"_vimrc" (for Win32) (*)
- The file "_vimrc" (for Unix, Amiga) (*)
".vimrc" (for Win32) (*)
- The file ".exrc" (for Unix, Amiga)
"_exrc" (for Win32)
(*) このファイルを使用するか環境変数を使用した場合、自動的に 'compatible'
オプションがオフに設定される。compatible-defaultを参照。
Note: mzscheme インターフェイスを使用する場合は、vimrc ファイルの読み込
みの後に初期化される。それより後に 'mzschemedll' を変更しても効果はない。
4. プラグインスクリプトを読み込む load-plugins
次のコマンドと同じことを実行する:
:runtime! plugin/**/*.vim
オプション 'runtimepath' に指定された各ディレクトリのサブディレクトリ"plugin" にある拡張子が ".vim" となっているファイルを実行する(各ディレ
クトリごとに名前順で実行される)。サブディレクトリに対しても再帰的に検
索される。
ただし "after" において変更した 'runtimepath' 内のディレクトリはこの手
順をスキップし、afterパッケージだけを読み込む。下の説明を参照。
次の場合にはプラグインを読み込まない:
- vimrcファイルでオプション 'loadplugins' がオフに設定された。
- 起動時の引数に--nopluginが指定された。
- 起動時の引数に--cleanが指定された。
- 起動時の引数に "-u NONE" が指定された。
- +evalの機能を無効にしてVimをコンパイルした。
Note: 引数に "-c set noloadplugins" と指定しても意味がない。このコマン
ドはこの時点ではまだ実行されない。"--cmd 'set noloadplugins'" または
"--cmd 'set loadplugins'" とすればよい。--cmd
パッケージが読み込まれる。'packpath' 内の各エントリの "start" ディレク
トリの下で見つかったプラグインだけが上記の要領で読み込まれる。見つけた
pluginディレクトリはすべて 'runtimepath' に追加され、すべてのプラグイ
ンが読み込まれる。詳細は packages を参照。
プラグインスクリプトが読み込まれるが、しかし上で言及したように、ここで
は "after" で終わるディレクトリに限られる。パッケージが見つかった際に
は 'runtimepath' が変更されるが、"after" で終わるディレクトリは追加さ
れないことに注意。
5. 'shellpipe' と 'shellredir' を設定する
それ以前に設定されていなければ、'shell' オプションに従って 'shellpipe'
と 'shellredir' オプションが設定される。つまり自分で設定しなくても、
Vimが適切な 'shellpipe' と 'shellredir' の値を設定してくれる。
6. "-n" コマンド引数が使用されていたら、'updatecount' を0に設定する
7. バイナリオプションを設定する
Vimの起動時に "-b" フラグが与えられた場合、この時点でバイナリ編集用の
フラグが設定される。-b参照。
8. GUIの初期化を行う
"gvim" として起動された場合、GUIの初期化が行われる。gui-init参照。
9. viminfoファイルを読み込む
'viminfo' オプションが空でなければ、viminfoファイルが読み込まれる。
viminfo-file参照。
10. quickfixファイルを読み込む
Vimに "-q" フラグが与えられた場合、quickfixファイルが読み込まれる。こ
れに失敗するとVimは終了する。
11. 全てのウィンドウを開く
-oフラグが与えられた場合、ウィンドウが開く(しかしまだ表示されない)。
-pフラグが与えられた場合、タブページが作られる(しかしまだ表示されな
い)。
スクリーンが切り替えられると、描画が始まる。
"-q" フラグがVimに与えられた場合、最初のエラーにジャンプする。全ての
バッファが BufAdd 自動コマンドを起動することなくロードされる。
12. スタートアップコマンドが実行される
"-t" フラグがVimに与えられた場合、タグにジャンプする。
-cと+cmd引数で与えられたコマンドが実行される。
'insertmode' オプションがセットされていると、挿入モードに入る。
スタートフラグがリセットされ、has("vim_starting") がゼロを返すようにな
る。
v:vim_did_enter 変数が 1 にセットされる。
VimEnterのautocommandが実行される。
最初に見つかった vimrc、gvimrc が $MYVIMRC、$MYGVIMRC に設定される。
初期化のヒント
スタンダードセットアップ:
全ての編集セッションに有効な、デフォルト設定とキーマッピングを設定するvimrc
ファイルを作成する。それを既に3bで述べた位置に置く:
~/.vimrc (Unix)
s:.vimrc (Amiga)
$VIM\_vimrc (Win32)
~/config/settings/vim/vimrc (Haiku)
Note vimrcファイルを作るとデフォルトで 'compatible' オプションがオフに設定され
る。compatible-default参照。
ローカルセットアップ:
特定のディレクトリだけにおいて編集時に必要になるコマンドを vimrcファイルに書
き、そのディレクトリに ".vimrc" (Win32は "_vimrc")という名前で置く。NOTE: Vim
に、これらのファイルを見るように指定するには、'exrc' オプションをオンにする必
要がある。trojan-horse(トロイの木馬)も参照。
システムセットアップ:
これは複数人で使うUNIXシステムを管理し、全員のデフォルト設定を行いたい時に適用
される。デフォルト設定とキーマッピングを行うコマンドをvimrcファイルに記述し、
":version" コマンドで表示される場所に置く。
Vimの現在状態をファイルに保存する
オプションの値を変えたときや、キーマッピングを作成した時には、それらを後で再利
用するためにvimrcファイルに保存したいだろう。現在の設定状態をファイルに保存す
るためにはsave-settingsを参照。
Viユーザーの設定の問題の回避
Viは環境変数EXINITとファイル "~/.exrc" を初期化に使用する。もし(Vimの設定が)Vi
に干渉して欲しくないならば、それらを使う替わりにVIMINITとvimrcを使用する。
Amigaの環境変数
Amigaには2種類の環境変数が存在する。1つはDOS 1.3(かそれ以上)のsetenvコマンド
で、これはVimによって認識される。AmigaDos 1.3のマニュアルを参照。古いManxのSet
コマンド(バージョン5.0以前)の環境変数は、認識されない。
MS-Windowsの行区切り文字
MS-Windowsでは、全てのvimrcファイルは行区切文字として<CR><NL>を使用していると
仮定する。<NL>だけを行区切文字として持つファイルで、":map xx yy^M" のような行
がある場合、問題を引き起こす。末尾の ^M は無視されてしまうだろう。
Vi と互換性のあるデフォルトの値
compatible-default
Vim が起動すると、オプション 'compatible' がオンに設定される。これは初期化時に
使用される。しかし以下の条件のいずれかに当てはまると、直ちに 'nocompatible' が
設定される。
- ユーザーの vimrc ファイルが見つかる
- カレントディレクトリに vimrc ファイルが見つかる
- 環境変数 "VIMINIT" が設定されている
- 起動引数 "-N" が指定されている
- 起動引数 "--clean" が指定されている
- defaults.vim がロードされる
- gvimrc が見つかる
上記はシステムの vimrc ファイルでは発生しないことに注意。
これには他のオプションを設定やリセットする副作用がある('compatible' 参照)。し
かし変更されるのは、設定やリセットされていないオプションに限られる。これは、
Vim 起動時に 'compatible' の値に起こるのと同様の作用となる。
'compatible' はリセットされず、defaults.vim が読み込まれない:
- Vimが -u 起動引数で起動され、特にそれが "-u NONE" であった。または…
- -C 起動引数で起動された。または…
- 実行ファイルの名前が "ex" で終わっていた。(これは Vim を "ex" として起動した
場合には、"ex" のように動作させるための仕様である)
'compatible' を .vimrc で設定すると副作用が発生する。マッピングは見つかった時
点で解釈されるので、"<CR>" のようなものを使う時に違いが生じる。もしもマッピン
グが 'compatible' の値に依存している場合、そのマッピングを定義する前に
'compatible' を設定する。
.vimrc ファイルが無い際のデフォルト
defaults.vim E1187
Vim を普通に起動してユーザー vimrc ファイルが見つからない場合には、
$VIMRUNTIME/defaults.vim スクリプトが読みこまれる。このスクリプトは
'compatible' をオフにし、シンタックスハイライトを有効にする他、幾つかのことを
実施する。詳細はそのスクリプトを参照せよ。NOTE: これは正確には Vim 8.0 からで
はなく 7.4.2111 から導入された。
これはVimの新規ユーザーにとって良く機能する。自分で .vimrc を作る際には、その
最上部のほうに以下の2行を追加することが推奨される:
unlet! skip_defaults_vim
source $VIMRUNTIME/defaults.vim
$VIMRUNTIME/vimrc_example をコピーすることでも、同じことができる。他の方法source $VIMRUNTIME/defaults.vim
として、defaults.vim 自体をあなたの .vimrc にコピーし、変更をすることもできる。
(ただしこの方法では、将来 defaults.vim が変更された際に、そのアップデートは反
映されない)
もしも defaults.vim の一部が気に入らない場合でも、まず defaults.vim を読み込ん
でから、個々の設定を変更することができる。個別の項目をどのように変更するべきか
のヒントとして defaults.vim ファイルを参照せよ。
skip_defaults_vim
システムワイドの vimrc を使っていて defaults.vim を使いたくない場合には、
"skip_defaults_vim" 変数を設定する。これが設定された状態で、自分の .vimrc で
defaults.vim を読み込みたい場合には、上で示した例のように、最初に unlet
skip_defaults_vim を行うと良い。
トロイの木馬を回避する
trojan-horse
現在のディレクトリにある "vimrc" や "exrc" を読み込むときに、'secure' オプショ
ンを設定することで、安全性のために幾つかのコマンドを無効にすることができる。タ
グファイル内のコマンドを実行する際にも常にこれが行われる。そうでないと他人が作
成した悪意を持ったコマンドを、偶然実行してしまう可能性がある。使用不可になるコ
マンドは、シェルを起動するものと、ファイルに書き込むものと、そして ":autocmd"
である。":map" コマンドは表示され、どのようなマッピングがなされたか確認するこ
とができる。
ローカルなvimrcファイル内で全てのコマンドを実行したい場合には、EXINIT
かVIMINIT環境変数か、グローバルな "exrc" もしくは "vimrc" ファイルで 'secure'
オプションをオフに設定する。現在のディレクトリにある "vimrc" と "exrc" からは、
理由は明らだが、これは設定できない。
UNIXシステムでは、vimrcファイルの所有権がユーザーにないときだけ
'secure' が適用される。警告: vimrcかexrcを含むアーカイブを展開したときには、そ
のファイルはあなた自身のものになる。そこには安全性保護などない。Vimを起動する
前に現在のディレクトリにvimrcファイルがないかチェックするか、'exrc' オプション
をオフに設定したほうが良い。幾つかのUNIXシステムでは一般ユーザーがファイルに
"chown" を行うことを許しているものがある。これは別のユーザーが悪意に満ちた
vimrcを作成し、所有者を貴方にすることを可能にしている。注意されたし!
タグサーチコマンドを使う時には、実行されるサーチコマンド(タグファイル
の各行の最後の部分)は常に安全なモードで行われる。これは現在のディレクトリにあ
るvimrc/exrcからコマンドが実行されるのと、ちょうど同じように働く。
Vimの起動が遅いときには
slow-start
Vimの起動に時間がかかる場合は --startuptime 引数を使って原因を探すことができ
る。よくある原因としては次のようなものがある:
- UnixでGUIやX11を有効にしている場合(":version" の出力で "+GUI" と "+X11" を
チェック)、共有ライブラリをロードしX11サーバーに接続する必要がある。GUIとX11
を無効にしてコンパイルしたバージョンを試して欲しい。これにより実行ファイルが
小さくもなるだろう。
CUI端末でVimを起動するときの引数に-Xを指定するとXサーバーと接続しないよう
にできる。
- "viminfo" を使用している場合、viminfoファイルを読み込むのに少し時間がかかる。
viminfoが原因ならば一時的にviminfoを無効にすることによって確認することができ
る(Vimを引数 "-i NONE" で起動する。-i)。":set viminfo='20,<50,s10" と設定
して、レジスタに保存される行数を減らしてみるのも良い。viminfo-file。
紹介メッセージ
:intro
ファイル名を与えずにVimを起動した場合、(Vimのことを知らない人に向けて)紹介メッ
セージが表示される。そのメッセージはなんらかの操作によって画面が再描画されると
すぐに消される。もう一度メッセージをみるには、":intro" コマンドを使用する(表示
するスペースがなければ一部だけが表示される)。起動時に紹介メッセージを表示しな
いようにするには 'shortmess' に 'I' フラグを追加する。
info-message
起動引数に--helpや--versionを指定するとVimはメッセージを出力して終了する。
通常はそのメッセージは標準出力に送られるので、リダイレクトしてファイルに書き込
むことができる:
vim --help >file
Vimでその出力を取り込むには:
:read !vim --help
gvimは標準出力と標準エラー出力が端末に繋がってないときに、自身がデスクトップか
ら起動され、メッセージを出力する端末がないものと判断する。このせいで上記の
":read" コマンドを使用した例は使えない。使用できるようにするには 'shellredir'
を標準設定の ">&" から ">" へ変更する:
:set shellredir=>
:read !gvim --help
:read !gvim --help
しかしこのようにしてもgvimが標準出力を使用しないようなシステムでは機能しない。
==============================================================================
5. $VIM と $VIMRUNTIME
$VIM
環境変数の "$VIM" は、設定ファイル ".vimrc" のような、Vimが使用するさまざまな
ファイルの置き場所を見つけるために利用される。"$VIM" の値はシステムに依存する。
startupを参照。
全てのユーザーが環境変数$VIMを設定しなくてすむように、Vimは次の順番で$VIMの値
を決定する:
1. 環境変数$VIMが定義されていればそれを使う。$VIMを定義してVimが使用するファイ
ルをそのディレクトリから探し出すようにできる。例:
setenv VIM /home/paul/vim
2. 'helpfile' が問題のある環境変数を含んでいなければその値を使う(標準設定は"$VIMRUNTIME/doc/help.txt" であり、これはニワトリと卵の問題を含んでいる)。
ファイル名("help.txt" など)の部分は取り除かれる。そしてディレクトリ名の最後
が "doc"、"runtime"、"vim{version}" (例えば "vim82")、のどれかならそれも取
り除かれる。
3. Win32ではVimの実行可能ファイルがあるディレクトリを使用する。ディレクトリ名
の最後が "/src" ならそれは取り除かれる。配布されているVim一式の.zipファイル
をあるディレクトリに展開し、検索パスを調整して使っているようなら便利である。
ディレクトリ名の最後が "runtime" か "vim{version}" (例えば "vim82")ならそれ
は取り除かれる。
4. Unixではコンパイル時に指定したインストール先のディレクトリを使用する
(":version" の出力を見て確認できる)。
このうちのどれかが使用できるならVimは環境変数$VIMを設定する。あとからその値を
変更するには ":let" コマンドを次のように使う:
:let $VIM = "/home/paul/vim/"
$VIMRUNTIME
環境変数の "$VIMRUNTIME" は、ヘルプファイルや構文強調表示の定義ファイルのよう
な、Vimが使用するさまざまな支援ファイルの置き場所を見つけるために使用される。
例えば、主要なヘルプファイルは通常は "$VIMRUNTIME/doc/help.txt" である。
普通はユーザーが自分で$VIMRUNTIMEを設定せずに、Vimに設定させる。Vimは次の順番
で$VIMRUNTIMEの値を探す:
1. 環境変数$VIMRUNTIMEが設定されていればそれを使う。ランタイムファイルを特殊な
場所に置くときに設定する。
2. "$VIM/vim{version}" ディレクトリがあればそれを使う。{version}はVimのバージョ
ン番号から '-' や '.' を除いた物である。例えば "$VIM/vim82"。これは
$VIMRUNTIME として一般的な値である。
3. "$VIM/runtime" ディレクトリがあればそれを使う。
4. $VIMの値を使う。これは古いバージョンとの互換性のためである。
5. オプション 'helpfile' が設定されていて '$' を含んでいないとき、その値を使用
する。最後の "doc/help.txt" は取り除かれる。
Unixでコンパイル時に$VIMRUNTIMEの初期値を設定した場合(":version" の出力をみて
確認できる)、2から4は無視される。そして5を試したあとにコンパイル時に設定した値
が使用される。つまり$VIMの値を使わずにコンパイル時に設定した値を使用するという
ことである。これは$VIMが "/etc" でランタイムファイルが "/usr/share/vim/vim82"
にあるような場合に便利である。
このうちのどれかが使用できるならVimは環境変数$VIMRUNTIMEを設定する。あとからそ
の値を変更するには ":let" コマンドを次のように使う:
:let $VIMRUNTIME = "/home/piet/vim/vim82"
シェル内で $VIMRUNTIME の値が必要な場合(例えば、ヘルプファイルを grep するスク
リプトなど)は、次のようにすれば得られる:
VIMRUNTIME=`vim -e -T dumb --cmd 'exe "set t_cm=\<C-M>"|echo $VIMRUNTIME|quit' | tr -d '\015' `
$VIMRUNTIME を空の値に設定してはならない。いくつかの機能が動作しなくなる場合が
ある。
==============================================================================
6. サスペンド suspend
iconize iconise CTRL-Z v_CTRL-Z
CTRL-Z ":stop" のようにVimをサスペンドする。
ノーマルモードとビジュアルモードで動作する。挿入モード
とコマンドラインモードでは、CTRL-Zは通常のキャラクタ文
字として入力・挿入される。ビジュアルモードで使用したと
きはサスペンドから復帰するとノーマルモードになる。
Note: CTRL-Z がアンドゥになる場合は mswin.vim を参照。
:sus[pend][!] or :sus :suspend :st :stop
:st[op][!] Vimをサスペンドする。
'autowrite' がオンのときに '!' を付けなかったときには、
ファイル名を持つ未保存のバッファは全て保存される。
'!' を付けたときや、'autowrite' がオフのときには、未保
存のバッファは保存されないので、後でVimをフォアグラウ
ンドに戻すのを忘れてはならない。
GUIモードでは、サスペンドはgvimのアイコン化として実装されている。MS-Windows で
は、gvimは最小化される。
多くのUNIXシステムでは、VimをCTRL-Zでサスペンドすることが可能である。これは
ノーマルモードとビジュアルモードにおいて有効である(次の章vim-modesを参照)。
Vimを再びフォアグラウンドに戻せば、続きの作業を行うことができる。それ以外のシ
ステムでは、CTRL-Zは新しいシェルをスタートさせる。これはコマンド ":sh" と同じ
である。この場合、シェルを終了させればVimで続きの作業を行うことができる。
{訳注: vim-modesに何がある?}
X-windowsではVimをサスペンドするとセレクションの所有権が失われる。つまり選択し
ていた内容を他のアプリケーションにコピーすることができない(そうしないとVimが停
止しているのでセレクションを得ようとしたプログラムがフリーズしてしまう)。
==============================================================================
7. 終了 exiting
Vimを終了する方法はいくつかある:
- 最後のウィンドウを :quit で閉じる。変更がない場合にのみ。
- 最後のウィンドウを :quit! で閉じる。変更がある場合にも。
- 全てのウィンドウを :qall で閉じる。変更が一切ない場合にのみ。
- 全てのウィンドウを :qall! で閉じる。変更がある場合にも。
- :cquit を使う。変更がある場合にも。
:cquit を使ったり、エラーメッセージがある場合には、Vimは終了コード 1 で終了
する。エラーは :silent! または :catch を使うことで避けられる。
==============================================================================
8. 設定の保存 save-settings
多くの人はvimrcファイルを手作業で編集しているだろう。この機能はそのような人に
優れた利便性を提供する。vimrcファイルを自動的に作成するコマンドが用意されてい
て、作成したファイルをそのまま、もしくは一部分だけをコピーして使用することがで
きる。
:mk :mkexrc
:mk[exrc] [file] 現在のキーマッピングと変更されているオプションを
[file]に保存する( [file]を省略するとカレントディレクト
リの ".exrc" に保存される)。 [file]がすでにあるときに
は保存しない。
:mk[exrc]! [file] 現在のキーマッピングと変更されているオプションを
[file]に保存する( [file]を省略するとカレントディレクト
リの ".exrc" に保存される)。 [file]がすでにあるときに
は上書き保存する。
:mkv :mkvi :mkvimrc
:mkv[imrc][!] [file] ":mkexrc" と同じだが [file]を省略したときにカレントディ
レクトリの ".vimrc" に保存する。コマンド ":version" も
ファイルに書き込まれる。
これらのコマンドは ":map" コマンドや ":set" コマンドをファイルに書き込む。書き
込んだコマンドを実行するとキーマッピングやオプションが現在と同じように設定され
る。オプションの 'columns'、'endofline'、'fileformat'、'key'、'lines'、
'modified'、'scroll'、'term'、'textmode'、'ttyfast'、'ttymouse' は端末やファイ
ルに依存するため含まれない。Note: オプションの 'binary'、'paste'、'readonly'
が含まれるが、これは必ずしも望むような動作ではないかもしれない。
マッピングに特殊なキーが使われているときは、マッピングが正しく解釈されるよう
に、オプション 'cpoptions' が一時的に初期値に戻される。Viとの互換性はなくなる
が、別の端末でもそのマッピングを使用できるようになる。
グローバルなマッピングだけが保存される。バッファローカルなマッピングは保存され
ない。
一般的な方法は、デフォルトの ".vimrc" ファイルを使い、":map" や ":set" コマン
ドで設定を変更し、それをファイルに保存するというものである。まず
":source ~piet/.vimrc.Cprogs" のようなコマンドでデフォルトの ".vimrc" を読み込
み、実際に設定を変更してから、":mkvimrc!" を使ってカレントディレクトリに設定を
保存する。もしもこのファイルをデフォルトの .vimrc にしたいならば、UNIXではホー
ムディレクトリへ、Amigaならば s: へ、MS-Windowsならば $VIM ディレクトリへその
ファイルを移動する。自動コマンドautocommandやモードラインmodelineも、同じ
方法を使って設定することができる。
vimrc-option-example
vimrcにオプションの設定を1つだけ加えるには次のようにする:
1. Vimでvimrcファイルを開く。
2. 期待どおりになるようにオプションを設定する。例えば、'guifont' を設定してい
ろんなフォントを試す。
3. オプションを設定する行を追加する。値を入力するのに '=' レジスタを使用する。
例えば、オプション 'guifont' の設定を加えるには:
o:set guifont=<C-R>=&guifont<CR><Esc>
[<C-R>はCTRL-R、<CR>はエンターキー、<Esc>はエスケープキー]特別な文字(特にスペース)はエスケープする必要がある。
Note: .vimrcファイルを作成するときにはオプション 'compatible' が持つ副作用の影
響に注意する必要がある。'compatible'を参照。
副作用を防ぐため、":mkvimrc"、":mkexrc"、":mksession" は最初にオプション
'compatible' の設定を出力する。
==============================================================================
9. ビューとセッション(Views and Sessions) views-sessions
ユーザーマニュアルの21.4と21.5で簡単に紹介されている。
View view-file
ビューとは、あるウィンドウに適用された設定の集合である。ビューを保存しておい
て、あとからそれを復元することで、開いていたテキストをまた同じように表示するこ
とができる。ウィンドウに関連したオプションやマッピングも復元されるので、ビュー
を保存したときと同じ状態で作業を再開することができる。
Session session-file
セッションとは、全てのウィンドウのビューとグローバルな設定のことである。セッ
ションを保存しておいて、あとからそれを復元することで、各ウィンドウのレイアウト
を元に戻すことができる。セッションを利用してすばやくプロジェクト(作業単位)を切
り替えることが可能で、そのプロジェクトで開いていたファイルを自動的に開くことが
できる。
ビューとセッションはviminfoファイルを拡張した便利な機能である。ビューとセッ
ションをviminfoファイル(viminfo-file)と併用することで全ての情報を記録するこ
とができる。
保存しておいたビューやセッションを素早く再開するには引数-Sを使う:
vim -S Session.vim
これら全ては {+mksessionが有効な場合のみ利用可能}
:mks :mksession
:mks[ession][!] [file] 現在のセッションを復元するための Vim script を作成す
る。
[!]を付けたときはファイルを上書保存する。
[file]を省略したときは "Session.vim" に保存する。
":mksession" の出力は ":mkvimrc" の出力に似ているが、さらにいくつかのコマンド
が追加されている。どのコマンドが出力されるかはオプション 'sessionoptions' に依
存する。保存したファイルは、コマンド ":source" で実行すると次の効果がある:
1. 'sessionoptions' に "options" が含まれているときは、グローバルなマッピング
とオプションを復元する。スクリプトローカルなマッピングは復元されない。
2. 'sessionoptions' に "globals" が含まれているときは、大文字で始まって1つ以上
の小文字を含む名前を持ったグローバルな変数を復元する。
3. 現在のタブページにあるカレント以外の全ウィンドウを閉じる。現在のタブページ
を除いた全タブページを閉じる(この結果現在ロードされているバッファはアンロー
ドされ、隠しバッファになるかは 'hidden' が設定されているかそうでないかによ
る)。カレントのバッファが空で名前無しなら削除する。
4. 'sessionoptions' に "curdir" が含まれているときは、カレントディレクトリを復
元する。あるいは、'sessionoptions' に "sesdir" が含まれているときは、カレン
トディレクトリをセッションファイルが保存されているディレクトリに変更する。
5. 'sessionoptions' に "winpos" が含まれているときは、GUIウィンドウの位置を復
元する。
6. 'sessionoptions' に "resize" が含まれているときは、スクリーンのサイズを復元
する。
7. 'sessionoptions' に "buffers" が含まれているときは、バッファリストと各バッ
ファにおけるカーソルの位置を復元する。隠れ(hidden)バッファや開放済み
(unloaded)バッファも含めて、全てのバッファを復元する。"buffers" が含まれて
いないときは、ウィンドウに表示されているバッファのみが復元される。
8. 全てのウィンドウとそのレイアウトを復元する。'sessionoptions' に "help" が含
まれているときは、ヘルプウィンドウも復元する。'sessionoptions' に "blank"
が含まれているときは、無名のバッファを編集していたウィンドウも復元する。
'sessionoptions' に "winsize" が含まれていて、ヘルプウィンドウや無名バッファ
のウィンドウが除外されていないときは、ウィンドウのサイズも復元する(スクリー
ンサイズに比例する)。"winsize" が含まれていないときは、ウィンドウは妥当なサ
イズになる。
9. 各ウィンドウのビューを:mkviewの機能と同じように復元する。しかし
'viewoptions' ではなく 'sessionoptions' が使われる。
10. セッションファイルと同じ名前で最後が "x.vim" (eXtraのx)という名前のファイ
ルがあればそのファイルを実行する。この仕組を使ってセッションに関連した処理
や設定、例えばGUIのメニューを作成するなど、を行うことができる。
{訳注:セッションファイルがSESSION.vimならSESSIONx.vimが実行される。}
セッションを復元すると、内部変数の "v:this_session" (this_session-variable)
を使って現在のセッションの名前(フルパス)を利用できる。
それを利用したマッピングの例:
:nmap <F2> :wa<Bar>exe "mksession! " . v:this_session<CR>:so ~/sessions/
これは現在のセッションを保存してから、別のセッションを開こうとするものである。'sessionoptions' から "tabpages" が除かれていない限り、セッションはすべてのタ
ブページを含む。tab-page
セッションファイルが読み込まれると、自動コマンドイベント SessionLoadPost が
発生する。
SessionLoad-variable
セッションファイルを読み込んでいる間、グローバル変数 SessionLoad は 1 になる。
プラグインはこれを使ってイベント SessionLoadPost が発生するまで、なんらかの作
業を後回しにすることができる。
:mkvie :mkview
:mkvie[w][!] [file] 現在のウィンドウの状態を復元するための Vim script を作
成する。
[!]を付けたときはファイルを上書保存する。
[file] を省略したり、1から9の数字を指定したときは、
'viewdir' に指定されたディレクトリに適切な名前で保存さ
れる。'viewdir' の最後に指定されたパスが存在しないとき
にはそのディレクトリも作成される。例えば、'viewdir' が
"$VIM/vimfiles/view" なら "$VIM/vimfiles" の中に
"view" が作成される。
[file]を省略、もしくは数字を指定した場合は、常に上書き
保存される。ビューを復元するときには :loadview を使
用する。
[file]にファイル名を指定すると、編集を再開するためのコ
マンドがそのファイルに保存される(この場合は 'viewdir'
は使われない)。
":mkview" の出力は次の項目を含んでいる:
1. ウィンドウで使用している引数リストを復元する。グローバルな引数リストを使っ
ているときにはそれが使用される。
引数リストのインデックスも復元される。
2. ウィンドウで編集していたファイルを開く。編集していたファイルがなければ、空
のウィンドウが作成される。
3. 'viewoptions' が "options" か "localoptions" を含んでいるときは、その
バッファやウィンドウに特有な(ローカルな)、マッピング、短縮(abbreviations)、
オプション、を復元する。
セッションの一部としてビューを保存するときに、'sessionoptions' に "options"
が含まれているときは、オプションのグローバルな値とローカルな値が両方保存さ
れる。
4. 'viewoptions' が "folds" を含んでいるときは、手作業で設定した折り畳みを復元
する。折り畳みの開閉状態も復元する。
5. ファイルにおけるカーソルとスクロールの位置を復元する。閉じた折り畳みがある
とうまく機能しない。
6. ローカルなカレントディレクトリを復元する。グローバルなカレントディレクトリ
と違っている場合、かつ 'viewoptions' が "curdir" を含んでいる場合のみ。
{訳注: current-directory}
Note: ビューとセッションは完璧ではない:
- 全てを復元するわけではない。例えば、関数、自動コマンド、":syntax on"、などは
含まれない。レジスタやコマンドラインの履歴などは、ビューやセッションではな
く、viminfoに保存される。
- グローバルなオプションの設定は、その値を初期設定から変更していた場合のみ保存
される。現在の設定が初期設定とは違うときにセッションを復元しても、初期設定に
は戻らない。しかしながら、ローカルなオプションは初期設定に戻される。
- 既存のマッピングは警告なく上書きされる。そのようなときはよく分からないエラー
が発生するだろう。
- 手動で設定した折り畳みや、その開閉状態を復元すると表示が乱れることがある。
それはビューを保存してから復元する間に、編集していたファイルを変更した場合で
ある。
- Vim script はまったくもって効率的ではない。しかしそうは言っても、自分でコ
マンドを再入力するよりは断然早い。
:lo :loadview
:lo[adview] [nr] 編集中のファイルに関連したビューを読み込む。 [nr]を省
略すると、":mkview" で保存したビューが読み込まれる。
[nr]を付けた場合は、":mkview [nr]" で保存したビューが
読み込まれる。
":mkview" と ":loadview" の組は、1つのファイルに対して全部で10個のビューを管理
できる。ビューは 'viewdir' で指定したディレクトリに保存される。ビューはファイ
ル名を利用して管理されている。そのため、ファイルの名前を変更したり、(シンボリッ
ク)リンクファイルを使ってアクセスした場合は、対応するビューを見つけることがで
きない。
たまには 'viewdir' をきれいに掃除するといいだろう。
*.cファイルを編集するときにビューを自動的に保存、復元するには:
au BufWinLeave *.c mkview
au BufWinEnter *.c silent loadview
au BufWinEnter *.c silent loadview
==============================================================================
10. viminfoファイル viminfo viminfo-file E136
E575 E576 E577
いったんVimを終了させ、後に再び起動する時には、通常多くの情報が失われてしま
う。viminfoファイルは終了する時の情報を保存しておくのに使用され、それにより再
起動した時には同じ状態で編集セッションを続けることができる。
ユーザーマニュアルの21.3で簡単に紹介されている。
viminfoファイルにはこんなものを記憶できる:
- コマンドラインの履歴
- 検索文字列の履歴
- 入力(input())の履歴
- レジスタの内容
- 複数のファイルのマーク
- ファイルの中の位置を指し示すマーク
- 最後の検索/置換パターン('n' と '&' のため)
- バッファのリスト
- グローバル変数
コンパイル時に+viminfo機能が無効にされていたら、viminfoファイルはサポートさ
れない。
セッションファイルも使用することができる。viminfoファイルは「している仕事」に
依存しない、という点で異なる。通常viminfoファイルは一つしか存在しない。セッ
ションファイルは、ある特定の編集作業の状態を保存するのに使う。セッションファイ
ルは、作業しているプロジェクト毎に複数作成することが可能である。Viminfoもセッ
ションファイルどちらも、Vimをスタートしてすぐに好みの設定を行うという目的のた
めに、効果的に使用できる。 session-file
viminfo-read
Vimが起動した時に 'viminfo' オプションが空でなかったら、viminfoファイルが読み
込まれ、その情報は適切に使用される。変数 v:oldfiles がセットされる。起動時に
はマークは読み込まれない(しかしファイルマークは読み込まれる)。起動時に
'viminfo' オプションをどうやって設定するのかはinitializationを参照。
viminfo-write
Vimが終了する時に 'viminfo' が空でなかったら、情報がviminfoファイルに保存され
る(もし既に存在した場合には、それと合併(マージ)される)。'viminfo' オプション
は、どのような情報を保存するか、またどのくらいの量を保存するべきかその限界を指
定する為の情報を含む文字列である。('viminfo' 参照)。
マージは2つの方法で実施される。Vimのセッション中で変更や {訳注: あらたに} 設定
された大半のアイテムは保存され、変更されなかったものは既存のviminfoファイルの
ものが流用される。例えば:
- VimセッションAが、変数 START の含まれた viminfo を読み込む。
- VimセッションBが、同様にviminfoを読み込む
- VimセッションAが、変数 AAA と BOTH を設定し終了する
- VimセッションBが、変数 BBB と BOTH を設定し終了する
こうするとviminfoは次のようになるだろう:
START - 元からviminfoにあったものは、セッションA及びBに拠らず維持される
AAA - セッションA由来の値は、Bにより維持される
BBB - セッションB由来の値
BOTH - セッションB由来の値。Aの値は失われる。
viminfo-timestamp
幾つかのアイテムには、最後に変更された値を優先するために、タイムスタンプを用い
ている。これによりVimセッションの終了順序に関係なく、最新のアイテムが維持され
る。タイムスタンプは以下のアイテムに導入されている:
- コマンドラインの履歴
- 検索文字列の履歴
- 入力行の履歴
- 空ではないレジスタの値
- ジャンプリスト
- ファイルのマーク
このタイムスタンプ機能自体は Vim 8.0 よりも以前に追加された。Vim 7.4.1131 以降
の Vim 7.4 では各アイテムにタイムスタンプを記録しているが、使ってはいない。そ
のため古いVimと新しいVimを混在して使う場合には、常に新しいデータが維持される。
Note: Unixにおける注意点:
- viminfoファイルには入力したテキストや、使用したコマンドが記載されているの
で、他人に覗かれないように保護(パーミッション設定)したほうが良い。
- 複数のユーザーでviminfoファイルを共有したい時(例えば他のユーザーへ "su" する
時など)には、グループもしくは全員にviminfoファイルへの書き込み権限を与えるこ
とができる。Vimはそのviminfoファイルを置き換えるときに権限を維持する。しか
し、あなたのviminfoファイルを誰にでも読ませたり書かせたりしないように注意す
ること!
- 現在の "本当" のユーザーによって書き込み不能なviminfoファイルは、Vimは決して
上書きしない。これは "su" でrootユーザーになった時、しかし$HOMEがまだ通常ユー
ザーのホームディレクトリのままの時の助けとなる。そうでないとVimはroot所有の、
他の誰にも読めないviminfoファイルを作成してしまう。
- viminfo ファイルはシンボリックリンクであってはならない。セキュリティ上の問題
を避けるためである。
マークは個々のファイルに対して別々に保存される。ファイルが読み込まれ 'viminfo'
が空でない場合、viminfoファイルからマーク情報が読み込まれる。NOTE: マークはVim
が正常に終了したときにだけ保存される。また、Vimの起動中に開かれた ":bdel" され
ていないファイル全てのマークが記録される。もしも ":bdel" で破棄したファイルに
ついてマークを保存しておきたいのならば、":wv" を使う。'[' と ']' のマークは保
存されないが、'"' は保存される。'"' マークはファイルを開いたときに前回のカーソ
ル位置を復元するのに非常に便利である。'viminfo' に文字 "r" が与えられた時には、
一切のマーク情報は記録されない。これはリムーバブルメディア上のファイルのマーク
が保存されるのを避ける場合に使う(MS-Windowsでは "ra:,rb:" を、Amigaでは
"rdf0:,rdf1:,rdf2:" を使うことになるだろう)。viminfo ファイルにマークが記録さ
れているファイルの名前が v:oldfiles のリストに追加される。
viminfo-file-marks
大文字のマーク ('A から 'Z) はviminfoファイルが書かれるときに、保存される。数
字のマーク ('0 から '9) はちょっと特別である。viminfoファイルが書き込まれる時
(終了時、もしくは ":wviminfo" コマンド実行時)に、'0 が現在のファイルの現在の
カーソル位置に設定される。古い '0 は '1 になり、'1 は '2 になり、以下同様。"1
から "9 の削除レジスタに起こることに似ている。'0 に記憶する位置が '1 から '9
に既出であった時には、同じ位置が2度記憶されるのではなく、そのレジスタが '0 に
浮き上がってくる。結果として "'0" を使用すると、最後にVimを終了した時のファイ
ルとその行に戻ることができる。起動後直ちにそれを行うには、次のコマンドを試す:
vim -c "normal '0"
csh 互換なシェルではエイリアスをこんな風に使用して:
alias lvim vim -c '"'normal "'"0'"'
bash ライクなシェルでは:
alias lvim='vim -c "normal '\''0"'
特定のファイルのマークを保存しないようにするには 'viminfo' に "r" フラグを追加
する。
Viminfoファイルの名前 viminfo-file-name
- viminfoファイルの名前を特に指定しない時は、Unixでは "$HOME/.viminfo" に、
Amigaでは "s:.viminfo" に、Win32では "$HOME\_viminfo" になる。Win32で、$HOME
が設定されていない時には、"$VIM\_viminfo" になる。$VIM も設定されていない時
には "c:\_viminfo" が使われる。
- 'viminfo' オプションの 'n' フラグは、別の名前のviminfoファイルを使うために、
そのファイル名を指定するのに使用される'viminfo'。
- Vimの起動引数 "-i" も、viminfoとして別のファイルを指定するのに使用できる-i。
ファイル名として "NONE" (全て大文字)が与えられると、viminfoファイルは使用(読
み込みも書き込みも)されない。
- 'viminfofile' オプションは "-i" 引数のように使うことができる。実際、"-i" 引
数の値は 'viminfofile' オプションに格納される。
- 起動後に、コマンドで別の名前を与えると、デフォルト名や 'viminfo' や "-i" で
与えた名前を上書きすることができる("-i" はNONEが指定されていない時に限る)。
文字エンコーディング viminfo-encoding
viminfoファイルのテキストはオプション 'encoding' で指定したエンコーディングで
保存される。通常は 'encoding' の設定はいつも同じなので、問題なく機能する。しか
しながら、もしもviminfoファイルを読み込むときに、'encoding' の設定がviminfoファ
イルを保存したときとは違うエンコーディングに設定されていると、いくつかのテキス
ト(ASCII以外の文字)は不正な文字になってしまう。それを回避するには、オプション
'viminfo' に 'c' フラグを追加する:
:set viminfo+=c
そうするとVimは、viminfoファイルを保存したときの 'encoding' から現在の'encoding' へとテキストを変換する。これを利用するには+iconvが有効になってい
る必要がある。ファイル名は変換されない。
viminfoファイルを手動で読み書きする viminfo-read-write
viminfoファイルを手動で読み書きするのに2つのコマンドが用意されている。これは同
時に起動している複数のVim間で、レジスタの内容を交換するのに利用できる: まず片
方で ":wv" してから、もう片方で ":rv" する。既にレジスタに何かを記憶している場
合には、":rv!" する必要があることに注意。またこれを行うとコマンドラインの履歴
を含む全ての情報が、送り側のVimのもので上書きされてしまうことにも注意。
viminfoファイル自体を手で編集することもできるが、Vimによって作られる正しい
フォーマットのviminfoを元にすることを推奨する。一度試してみればどういう構造に
なっているかよく分かるだろう。これを覚えておけば、Vimを起動したときにいつでも
設定しておきたい内容を、"~/.my_viminfo" というようなファイルに用意しておくとき
に重宝する。例としては、あるデータをレジスタに予め読み込んでおくとか、コマンド
ライン履歴に特定のコマンドをいれるとか、そういう使い方がある。.vimrcファイルに
次の一行を入れておけば
:rviminfo! ~/.my_viminfo
その情報を読み込むことができる。ファイルの種類によって(Cコードだとかvimスクリプトだとか)、異なるviminfoを持ち、":autocmd" を組み合わせることでファイル名に
基づいたりしながら、それらを使用することもできる(:autocmd)参照。
viminfo-errors
Vimがviminfoファイルを読み込み中にエラーを検出すると、ファイルの上書きはされな
くなる。もしも10個以上のエラーがある場合には、それ以上viminfoファイルを読み込
むのを止める。こうするのはviminfoファイル内のファイル名が間違っている場合、突
発的にそのファイルを破壊してしまうのを避けるためである。これは "vim -R file"
としたいときに、誤って "vim -i file" とタイプしてしまうと起こり得る(そう、偶然
何人かが実際にそうしてしまったよ!!)。viminfoファイルにエラーがあったけれども
viminfoを上書きしたいのならば、エラーを修正するか、またはファイルを消すかのど
ちらかが必要(Vimの実行中は、ほとんどの情報が回復してしまう)。
:rv :rviminfo E195
:rv[iminfo][!] [file] viminfoファイルを [file](デフォルト:上記
viminfo-file-name 参照)から読込む。
[!]が与えれらた場合、既に設定されている情報(レジス
タ、マーク、v:oldfiles、その他)は上書きされる。
:wv :wviminfo E137 E138 E574 E886 E929
:wv[iminfo][!] [file] viminfoファイルを [file](デフォルト:上記
viminfo-file-name 参照)として保存する。
このコマンドは 'viminfofile' が "NONE" に設定されてい
る場合には効果がない。
まず既存のファイルの(古い)情報が読み込まれ、
Vim内部の(新しい)情報とマージ(合併)されてから、ファイ
ルに保存される。[!]を指定すると古い情報は読み込まれ
ず、Vim内部の情報だけが保存される。'viminfo' が空("")
に設定されている場合は、100個のファイルのマークが書き
出される。
"E929: Too many viminfo temp files" ("E929: 一時
viminfoファイルが多過ぎます!") というエラーが出たとき
には古い一時ファイル (例えば~/.viminf*) が残っていない
ことを確かめ、.viminfoファイルを保存するディレクトリの
書込み権限を確認すること。
:ol :oldfiles
:ol[dfiles] viminfo ファイルにマークが記録されているファイルのリス
トを表示する。起動時にこのリストが読み込まれ、
:rviminfo! を行った後でのみ変更される。v:oldfiles
も参照。このリストで表示される番号は c_#< で使うこと
ができる。
出力は :filter でフィルタリングできる。例:
filter /\.vim/ oldfiles
ファイル名に対してフィルタリングが行われる。{+eval 機能付きでコンパイルされたときのみ有効}
:bro[wse] ol[dfiles][!]
:oldfiles と同じようにファイルのリストを表示し、番号
の入力を待つ。有効な番号が入力されると、リスト中のその
ファイルを開く。
press-enter プロンプトが表示されたときは "q" を押す
とファイル番号を入力するプロンプトに戻れる。
! をつけると変更中のバッファを破棄する。abandon
{tiny または small でコンパイルされたときは利用できな
い}
vim:tw=78:ts=8:noet:ft=help:norl: