カテゴリー
Linux

Vim を一時停止しシェルに戻ったことをシェルプロンプト Starship に表示する方法

まとめ

~/.config/starship.toml

[custom.vim]
command = "echo Vim"
when = """ test -n "$VIMRUNTIME" """

解説

元にしたページ

このページで行っていることを Starship を使った場合として実現しただけです。

Vim からシェルを起動する方法

コマンドラインモードで :sh を実行します。

他にも方法はいくつかあるそうですが、私はいつもこれを使っています。他の方法でシェルを起動した場合に本投稿の内容が実現できるかどうかは確かめていません。

Vim からシェルを起動したことを確認する方法

echo $VIM または echo $VIMRUNTIME を実行して、何か値が出力されれば、 Vim からシェルを起動した状態です。そうでなければ何も出力されません。

$ echo $VIM
/usr/local/share/vim
$
$ echo $VIMRUNTIME
/usr/local/share/vim/vim82
$

タイプが楽なことから、 echo $VIM を使っておりました。ただ、自動化にあたって、よりふさわしいのは普通はユーザーが自分で設定しない想定の $VIMRUNTIME と判断しこちらを使うこととしました。

  • $VIMRUNTIME – starting – Vim日本語ドキュメント

    環境変数の "$VIMRUNTIME" は、ヘルプファイルや構文強調表示の定義ファイルのよう な、Vimが使用するさまざまな支援ファイルの置き場所を見つけるために使用される。 例えば、主要なヘルプファイルは通常は "$VIMRUNTIME/doc/help.txt" である。 普通はユーザーが自分で$VIMRUNTIMEを設定せずに、Vimに設定させる。

Starship で Vim からシェルを起動した状態であることを出力する

Starship のカスタマイズは、設定ファイルに記述することで行えます。

  • 設定 | Starship

    Starshipの設定を開始するには、~/.config/starship.toml ファイルを作成します。 Starshipのすべての設定は、このTOMLファイルで行われます。

設定ページを "vim" で検索すると文字モジュールの

vicmd_symbol "❮" シェルがvimの通常モードである場合、プロンプトのテキスト入力の前に使用される記号です。

がヒットしますけれども、試したところどうも違うようです。そこで custom commands モジュールの when オプションを使うことにしました。

  • Custom commands – 設定 | Starship

    The custom modules show the output of some arbitrary commands. These modules will be shown if any of the following conditions are met:

    • The current directory contains a file whose name is in files
    • The current directory contains a directory whose name is in directories
    • The current directory contains a file whose extension is in extensions
    • The when command returns 0

when オプションの値として Vim からシェルを起動しているならば 0 を返すシェルスクリプトを記述すればよいようです。 そこで、文字列長が 0 より大ならば真となる、つまり 0 を返す次のコマンドとすることにしました。

test -n "$VIMRUNTIME"

確かめてみると、 Vim からシェルを起動した場合は予想通り 0 が返ってきました。また、 Vim からシェルを起動していない場合は 1 が返ってきました。

$ test -n "$VIMRUNTIME"
$ echo $?
0
$

いよいよ Starship 設定に記述します。 Vim からシェルを起動した場合には、 "Vim" と表示することにしました。 Vim を象徴する絵文字があればそれを使いたいのですけれども、見つけられませんでした。 Starship の設定をあれこれ試して最終的に次に落ち着きました。

[custom.vim]
command = "echo Vim"
when = """ test -n "$VIMRUNTIME" """

おわりに

本投稿の過程を経まして、次のプルリクエストを作りました。

今までは Vim からシェルを起動し、起動したことを忘れて確かめるためにコマンドを何度も実行しておりました。苦痛ではありませんでしたけれども、これからはチラッと一瞥するだけで確認できるようになりましたので、嬉しく思います。

以上です。

コメントを残す