LoginSignup
2

More than 3 years have passed since last update.

posted at

updated at

Vim scriptの変数にスコープ別の色を付けるプラグインを作成した

はじめに

Vim9 scriptが本体にマージされてスコープ事情がややこしくなって来ましたので、視覚的な判別をしやすくするためにスコープ別に色を付けるプラグインを作成しました。

wordijp/vim-vimscript-scope-syntax

vim-plugをお使いの方は以下をvimrcに追加して:PlugInstallでインストールするだけで動きます。

Plug 'wordijp/vim-vimscript-scope-syntax'

デモ

カラースキーム slate での比較です。
適用前はすべての変数が同じ色になっているため、Vim scriptへの慣れが必要です。
demo_desert_before.png

こちらが、下のようにスコープ別に色が付きます。
demo_desert_after.png

Vim9 scriptでは文法が若干変わったため、それらへの対応がまだとなっています。
少し触ったところまだバグがあるようでしたので1、落ち着いたころに対応しようかと思います。

Vim9 script登場によるスコープ事情について

Vim9 scriptでは、ローカルスコープの変数に接頭辞 l: が不要になっていたり、演算・代入の際に let が不要になっています。
その為すべての変数にスコープ別の接頭辞を付けるわけにはいかなくなり、現在のスコープから変数がどのスコープに属しているかを意識する必要が若干出てきました。
関数の外で s: を付けずにグローバルスコープにしてしまうのは初心者の頃によくやりがちですが2、今後は接頭辞付きで統一するわけにはいかなくなり、接頭辞無し変数を使う機会が増えてくるかと思います。

スコープ別の色付けについて

色は、グローバル(g:)、スクリプト(s:)、ローカル(l:)、引数(a:)の4種類と、それ以外の特殊系(b:、 w:、 t:、 v:)を同じ色にした計5種類を設定していますが、それぞれの色は現在のカラースキームから自動生成をしています。
こだわりポイントとしては、4種類を寒暖色にして、グローバルとスクリプトは寒色、ローカルと引数を暖色にする事により、画面全体が暖色に近づくほど変数のスコープが狭くなっていると判断できるようにしてみました。

おわりに

Vim9 scriptにはまだバグがあるようですので、仕様が落ち着いたら改めて修正しようかと思います。


  1. インクリメント・デクリメントがREADME.mdには追加されたが出来なかったり、変数 i を使うとエラーが発生したり。 

  2. すぐに慣れるとは思います。 

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
What you can do with signing up
2