読者です 読者をやめる 読者になる 読者になる

今回新たに覚えた事

vimから標準出力に関してhelpとか教えてもらった事をメモします。
アドバイスありがとうございました。

Lingrvim-users.jpにおいて

from kanaさん

# :'<,'>w !cat
# linewiseじゃだめなのなら
# systemつかうしかない

http://www.lingr.com/room/vim-users.jp/archives/2009/02/21#msg-60608955

rangeでwを使って行を標準出力しcatで標準入力するというもの。
こういう使い方ができるとは知らなかったです。

!フィルタを使わないrangeでwは選択範囲をファイルに保存できて

:'<,'>w hogehoge.txt

この二つは見た目は似ているけど全然意味が違いますね。

:'<,'>w! cat
:'<,'>w !cat

なるほど。

関数

thincaさんの補足エントリーで知った2つ。

  • shellescape関数
  • temp関数

shellに出力する文字列を自分で正規表現でエスケープしようとしていました。こんな便利な関数があったとは。
次にtempname関数。
一時ファイルを扱う用に用意されているんですね。これは忘れずにおきたい関数です。

:h tempname()
		結果は文字列で、存在しないファイルのファイル名を示す。これはテ
		ンポラリファイルの名前として使用可能である。少なくとも連続26回
		の呼出しまでは違う名前を生成することが保証される。例: >
			:let tmpfile = tempname()
			:exe "redir > " . tmpfile
<		Unixでは、symlink攻撃や、他の人がそのファイルを読んでしまうな
		どのセキュリティ上の問題を防ぐために、このファイルはプライベー
		ト(現在のユーザのみアクセス可能)なディレクトリの中に置かれる。
		Vimが終了するとき、そのディレクトリとその中の全ファイルは削除
		される。
		MS-Windowsでは、'shellslash'がオンのときか'shellcmdflag'が'-'
		で始まるときはスラッシュが使われる。

system関数はinputパラメータで標準入力を渡す事ができるという事も知った。
今回はPuTTYが便利になっただけでなく、普段のvim操作とは違った視点でvimの機能を知る事ができてよかったです。