Help us understand the problem. What is going on with this article?

:terminal に関する小さい Tips

More than 1 year has passed since last update.

空いてたので割り込み。

君は 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

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

ぜひご活用下さい。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした