52
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vim その2Advent Calendar 2018

Day 4

:terminal に関する小さい Tips

Last updated at Posted at 2018-12-04

空いてたので割り込み。

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

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

ぜひご活用下さい。

52
30
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?