【vim】ビジュアルモードで選択してPythonに渡す

vim
田中太郎
田中太郎

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を快適に利用できるツールを作成してみてください。

コメント

タイトルとURLをコピーしました