Humanity

Edit the world by your favorite way

Vimでコマンドライン履歴を消す方法

この記事はVim Advent Calendar 2013の134日目の記事です。

恒久的に保存しないようにしたい場合

以下をvimrcに書いてください。

set viminfo+=:0

注意すべき点として、nフラグ(:help viminfo-n)はviminfoオプションの最後に置く必要があるので、
vimrcで

set viminfo+=n$HOME/.vimrc

のように指定している場合、この行の前に記載するようにしてください。

定期的に削除したい場合

「恒久的に保存しないようにしたい場合」と同じコマンドを実行してVimを終了してください。
終了時に.viminfoファイルに書き出されるため*1
必ず一旦Vimを終了させる必要があります。

また、nフラグを最後に置く必要がある点についても同様に注意してください。

応用

この方法はコマンドライン履歴に限らず、viminfoオプションで制御できるもの全てに使えます。
以下にviminfoオプションのhelpを全文引用します。

'viminfo' 'vi'		文字列	(Viの既定値は "", Vimの既定値は、
			     MS-DOS, WindowsとOS/2では: '100,<50,s10,h,rA:,rB:,
			     Amigaでは: '100,<50,s10,h,rdf0:,rdf1:,rdf2:
			     他のシステムでは: '100,<50,s10,h)
			グローバル
			{Vi にはない}
			{Vimが |+viminfo| 機能付きでコンパイルされたときの
			み有効}
	値が空でないとき、viminfo ファイルが起動に先立って読み込まれ、また終了
	時に書き出される (|viminfo-file| を参照)。値は指定部のコンマ区切りのリ
	ストである。指定部には、効果を指定するフラグ1文字の次に、その値を指定
	する数または文字列を指定する。指定されなかったものについては、既定値が
	使われる。フラグとその動作の一覧は、以下の通りである。
	フラグ	動作 ~
							*viminfo-!*
	!	これが含まれると、アルファベットの大文字で始まり、小文字を含ま
		ないグローバル変数を保存・復元する。つまり "KEEPTHIS" と
		"K_L_M" は保存されるが、"KeepThis" と "_K_L_M" は保存されない。
		入れ子になったリストと辞書は正しく復元されず、空文字列になる。
							*viminfo-quote*
	"	各レジスタで保存される行数の最大値。これはフラグ '<' の古い表
		記である。この表記の不利点は、エスケープのために " を前に書か
		ないといけないことである。そうしないとコメントの開始と見なされ
		てしまう!
							*viminfo-%*
	%	これが含まれると、バッファリストを保存・復元する。Vimの起動時
		にファイル名が引数に含まれていると、バッファリストは復元されな
		い。 Vimの起動時にファイル名が引数に含まれていないと、バッファ
		リストが viminfo ファイルから復元される。ファイル名のないバッ
		ファとヘルプ用バッファは、viminfo ファイルには書き込まれない。
		このフラグの後に続けて数値を書くと、保存されるバッファ数の最大
		値を指定することができる。数値が書かれていない場合、全てのバッ
		ファが保存される。
							*viminfo-'*
	'	マークが復元されるファイル履歴の最大値。オプション 'viminfo'
		が空でないときは、常にこれを設定しなければならない。
		また、このオプションを設定するとジャンプリスト |jumplist|と
		|changelist| も viminfo ファイルに蓄えられることになる。
							*viminfo-/*
	/	保存される検索パターンの履歴の最大値。非0 の値を指定すると、前
		回の検索パターンと置換パターンも保存される。これが含まれないと
		きは、'history' の値が使われる。
							*viminfo-:*
	:	保存されるコマンドライン履歴の最大値。これが含まれないときは、
		'history' の値が使われる。
							*viminfo-<*
	<	各レジスタで保存される行数の最大値。0 にすると、レジスタは保存
		されなくなる。'"' はこのフラグの古い表記である。
		下記のフラグ 's' も参照: 's' はKbyte単位で最大値を指定する。
							*viminfo-@*
	@	保存される input-line 履歴の最大値。これが含まれないときは、
		'history' の値が使われる。
							*viminfo-c*
	c	これが含まれると、viminfo ファイル内のテキストを、書き込まれた
		ときのエンコーディングから現在のエンコーディングに変換する。
		|viminfo-encoding| {訳注: および 'encoding'} を参照。
							*viminfo-f*
	f	ファイルマークを保存するかどうか。0 を指定すると、ファイルマー
		ク ('0 から '9, 'A から 'Z) は保存されない。これが含まれなかっ
		たり、値が非0 のときは、みな保存される。 '0 は (終了時やコマン
		ド ":wviminfo" の実行時の) カーソル位置の保存に使われる。
							*viminfo-h*
	h	viminfo ファイルの読み込み時に、'hlsearch' を無効にする。含ま
		れないときは、最後の検索コマンド以来、コマンド ":nohlsearch"
		が使われたかどうかによる。
							*viminfo-n*
	n	これでファイル viminfo の名前を指定する。名前は 'n' のすぐ後に
		続けて指定する。'viminfo' の最後に指定しなければならない!Vim
		の開始時に引数 "-i" が指定されると、それで指定されたファイル名
		がここで指定されたものを上書きする。環境変数は、オプションの設
		定時ではなく、ファイルの読み込み時に展開される。
							*viminfo-r*
	r	リムーバブル・メディア {訳注: USBメモリ、CD-ROM等の取り外せる
		記憶装置。この中身は取り替えてしまえば全く変わるので、ファイル
		履歴の意味がない} の指定。引数は文字列 (次の ',' まで) である。
		これは複数個指定できる。それぞれがマーク履歴の対象外になるパス
		の先頭部を指定する。これはリムーバブル・メディアを避けるためで
		ある。 MS-DOSでは "ra:,rb:", Amigaでは "rdf0:,rdf1:,rdf2:" と
		するとよい。ここに一時ファイルを指定することもできる(Unixの例:
		"r/tmp")。大文字と小文字の区別はない。それぞれの 'r' の引数の
		最大長は 50 文字である。
							*viminfo-s*
	s	Kbyte単位でのフラグの最大値。0のときレジスタは保存されない。現
		在のところこれはレジスタにのみ適用される。既定値の "s10" の状
		態では、10Kbyteを超えるテキストを持つレジスタは除外される。上
		記のフラグ '<' も参照: '<' は行数で制限値を指定する。

	例: >
	    :set viminfo='50,<1000,s100,:0,n~/vim/viminfo
<
	'50		最近編集した 50 ファイル内のマークは保存される。
	<1000		レジスタの中身 (それぞれ 1000 行まで) は保存される。
	s100		100Kbyteを超えるテキストを持つレジスタは保存されない。
	:0		コマンドラインの履歴は保存されない。
	n~/vim/viminfo	使用するファイル名は "~/vim/viminfo" である。
	'/' がない	'/' が指定されていないので、既定値が使われる。つまり全
			ての検索履歴や前回の検索パターン、置換パターンが保存さ
			れる。
	'%' がない	バッファリストは、保存も復元もされない。
	'h' がない	'hlsearch' による強調表示は復元される。

	'viminfo' を空の値から他の値へ変更するとき、|:rviminfo|を使うと、その
	ファイルの中身を読み込むことができる。これは自動的には行われない。

	安全上の理由から、このオプションをモードライン|modeline|やサンドボック
	ス|sandbox|の中で設定することはできない。

*1:.viminfoファイルに書き出すには「:wviminfo!」コマンドがありますが、終了時にまた書き出されるので同じことです