vimとPythonでデータをやり取りします
はじめに
やりたいこと
vimで選択した文字列を引数としてPythonに与え、Pythonの処理結果を反映させます
実装
実装方法について解説していきます
実装の手順は以下の3ステップです
1.外部コマンドを実行する
2.外部コマンドの結果とビジュアルモードの選択範囲を置換する
3.選択範囲をPythonに渡す
外部コマンドを実行する
vimから外部コマンドの実行は以下のように行います
:!<外部コマンド>
実際にやってみましょう
vimを立ち上げ、ノーマルモードで「:」を入力します
Exモードが立ち上がったら「!echo “hoge”」と入力してEnterを押します
linuxで「echo “hoge”」を実行した結果が返ってきました
このように外部コマンドを実行できます
外部コマンドの結果とビジュアルモードの選択範囲を置換する
次にビジュアルモードで選択した範囲と外部コマンドの結果を置換してみます
まず、V(Shift+v)でビジュアルモードに入ります
その後適当な範囲を指定して「:」でExモードに入ります
そうすると「:'<,’>」となっているので、「!echo “hoge”」を入力して実行します
:'<, ‘>!echo “hoge”
ビジュアルモードの選択範囲と外部コマンドの実行結果が入れ替わりました
ビジュアルモードの選択範囲をPythonに渡す
本題のビジュアルモードの選択範囲をPythonスクリプトの引数にします
work.pyという名で引数を受け取るPythonスクリプトを作成します
import sys
for i in sys.stdin:
print("//" + str(i), end="")
sys.stdinで標準出力を受け取り、行の先頭に「//」を付けるだけのスクリプトです
では、vimでビジュアルモード(shift+v)に入り、適当な範囲を選択します
その後、「:」でExモードに入り「!cat | python work.py」と入力します
意味は、「'<, ‘>!cat」で選択範囲を標準出力します
それを「|(パイプ)」で「python work.py」に渡しています
そしてEnterを押すと
pythonに引数を渡しその結果が返ってきました。
まとめ
今回はvimの選択範囲をPythonに与える方法について解説しました。
これをもとにvimを快適に利用できるツールを作成してみてください。
コメント