今回新たに覚えた事
vimから標準出力に関してhelpとか教えてもらった事をメモします。
アドバイスありがとうございました。
Lingrのvim-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の機能を知る事ができてよかったです。