Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

:terminal に関する小さい Tips

$
0
0

空いてたので割り込み。

君は Tapi を知っているか

Vim に :terminal機能が実装されている事は全国1億5千万人が知っている事実なのですが、:terminalの Tapi (Terminal API)機能をご存じの方はそのうち300人くらいしかいません。今日はその Tapi 機能について説明します。

Tapi 機能とは

:terminalは仮想 pty を用意してコマンドを実行する物で、コマンドを実行した後は :terminalが自発的に画面を更新します。Vim からはキーボードの操作がそのコマンドに対して渡されます。一見これだけで便利そうなのですが、:terminalを使っているユーザはよくこう思います。いや、必ずこう思います。

この :terminal で起動したシェルの中から親の Vim に対してファイルを開かせたいよなぁ

ね、思いましたよね。

これを実現するのが Tapi 機能です。

Tapi の仕組み

Tapi は Vim と :terminalとの間でやりとりされるエスケープシーケンスです。詳しくは :help terminal.txtを参照下さい。フォーマットは以下の通り。

<ESC>]51;msg<07>

msg は JSON の配列を指定します。要素の1つ目がアクション名、それ以降が引数です。現在用意されているアクションは2つあります。

drop

:terminalの中からそれを実行した Vim に対して「このファイルを開け」を指示します。

call

:terminalの中からそれを実行した Vim に対して「この関数を実行しろ」を指示します。ただし呼び出せる関数は Tapi_で始まるユーザ関数でなければなりません。

活用方法

今日はこの drop を利用した便利な Tips を紹介します。全国5千万人くらいは gofというコマンドを知っていると思います。このコマンドは一般的には peco 等と同じセレクタとして働きますが、このコマンドの実行結果を drop に渡す事で :terminalの中から親の Vim に簡単にファイルを開かせる事が出来ます。

#!/bin/sh

/bin/echo -e"\x1b]51;[\"drop\",\"`gof`\"]\x07"

実行するとこんな感じになります。

gofv

注目して欲しいのは :terminalの中で Vim が起動したのではなく、:terminalを起動した Vim 側で新しくウィンドウが作られバッファが開いている所です。

つまり Vim から gof の UI を利用してファイルを開きたいのであれば

:terminal ++close gofv

と起動すれば良い事になりますね。

ぜひご活用下さい。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>