アンドゥした位置をハイライトする Vim プラグインを書きました

Atom text editor の Vim エミュレータ、 vim-mode-plus に関する発表 を見ました。以前からアイデアの宝庫だと感心していましたが、もはや単なるエミュレータの域を超えているように思います。

スライドを見ていて、アンドゥした位置がハイライトされているのが面白かったので早速パクりました。

vim-highlightedundo

シェルコマンド diff を使って変更を検出してハイライトします。 diff コマンドの出力は行単位なのですが、もうひと頑張りしています。正直しないほうが良かったかも、と後悔しています。コードを書くのは楽しかったんですけど。

vim-highlighteundo-demo-gif

正直、ちょっともっさりしていて常用には向かないかも。 どんな編集をしたかは Vim のアンドゥツリーに残っていないので必ずしもハイライト位置は編集位置と一致しません。これは今のところ Vim script に提供されているインターフェースではどうにもならないと思います。

最初は削除される文字列と挿入される文字列の両方をハイライトしてたんですけど、邪魔だなぁ、という感じだったので止めました。一応、試すことはまだできます。

let g:highlightedundo#highlight_mode = 2

何回アンドゥ・リドゥできるのかを取得するのが一番難しかったです。

UD デジタル教科書体

Windows update done. 楽しみにしていた UD デジタル教科書体に等幅があると知ったので喜び勇んで Vim の 'guifontwide' オプションに設定してみました。いい…。

f:id:machakann:20171031010251p:plain

Vim script 用のオムニ補完プラグインの仕様を少し変えました

ちょっと前に書いた Vim script 用のオムニ補完プラグイン vim-Verdin の仕様を変えました。以前は設定用の変数は

let g:Verdin_fuzzymatch = 1

のように g:Verdin_name の書式だったのですが、 g:Verdin#name に変えました。つまり、今はこのように書きます。

let g:Verdin#fuzzymatch = 1

もし、使っていた方がいたら書き換えてください。新しい方の # 区切りの変数はオートロード変数といって、値を参照しようとすると対応するファイルを読み込んでくれます。新しい設定変数を扱うのに都合がよかったので、いい機会だと思って統一しました。

これに際して、これらの変数を定義しているファイル (autoload/Verdin.vim) を軽量化しました。具体的には最低限必要な変数と関数名の定義だけするようにして、処理の中身をよそのファイルに移しました。これで、 vimrc から変数を参照しても起動時間にあまり影響しないと思います。ただし、そもそも設定変数を使っていない人には当然影響はありません。

(2017/09/04 追記)
あと、あいまいマッチ (fuzzy match) 機能はデフォルトで有効になりました。上記の設定をする必要は今はないです。


オートロード変数はとても便利なんですけど、グローバルな g:foo#bar はあっても b:foo#bar は定義できないので、バッファローカルな設定に対応しようとすると b:foo_bar にせざるを得ないのだけ気持ちが悪いです…。

Vim script 用のオムニ補完関数を書きました

vim-Verdin

今のところ pure Vim script ですけど思ったよりも戦えている、という感触です。Fuzzy matching はちょっと重いような気もします。正直に言えば、 Vim script は <C-x><C-v> と 単語補完 <C-n>/<C-p> があればだいたい大丈夫なので、まあ便利かどうかは微妙なんですけど書くのはかなり楽しかったです。メンバ補完は無理。

おまけというかむしろメインなんですけど Vim plugin の help 書くときに英単語補完とタグ補完ができます。これはなかなか便利な感じ。
(2017/9/1: 英単語補完はなんか違うな、と思ってやめました)

f:id:machakann:20170529190458g:plain


もともと julialang 用のオムニ補完関数を書いてたんですけど、いろいろ使いまわせそう、と思ったらいつの間にかできてました。肝心の julia 用のはせっかくだから julia に処理を投げようか、と書き直すことにしました。 Vim に if_julia 欲しい。これからちょっと忙しくなるから完成しないかも。

Neomake が vimhelplint に対応したそうです

驚いたことに Neomake さんが vimhelplint に対応したそうです。すごい。

Neomake を使っている人は Neomake のルートディレクトリで次のシェルコマンドを実行すると vimhelplint を自動的にダウンロードします。

make build/vimhelplint

あとは、 Vim のヘルプファイル編集中に vimhelplint を指定して実行するだけ。

:Neomake vimhelplint

vimhelplint は実際重いので非同期実行できるのはありがたいかもしれないです。

「けものフレンズ」っぽい Vim カラースキーマをかいたよ!

やったー!

machakann/vim-colorscheme-kemonofriends

ここはジャパリパーク!

きのうあのやまからふきだしたんだよ!まだまわりがきらきらしてるでしょ!!

きのうあのやまからふきだしたんだよ!まだまわりがきらきらしてるでしょ!!

あなたサンドスターあんまりすきじゃないけものなんだね

let g:colorscheme_kemonofriends_sandstar_active = 0

vimhelplint のエラー7番を廃止しました

どうやら約一年前くらいになるのですが、 Vim プラグインのヘルプ用の lint を書きました。Vim プラグインを書き、ちゃんとヘルプまで書く人に向けて作られたかなりニッチなツールです。

vim-vimhelplint

vimhelplintの紹介

これを久々に更新、といいますか一つエラーを廃止しました。廃止したのは次のように書かれたオプション名を検出するエラー7です。

('option' ...

クオーテーションの前に ( などの記号がある場合、以前の Vim だと 'iskeyword' オプションの関係で 'option' ではなく ('option' としてタグジャンプしようとして失敗していました。このため、クオーテーションの前に空白を入れるように促していたのですが、どうやら Vim 本体の方に手をいれて問題を解決したらしいです。

「('isident' 参照)」でK →「残念ですが ('isident' にはヘルプがありません」 · Issue #10 · vim-jp/vimdoc-ja-working

これから書かれるヘルプについてはもう考慮しない方がいいと思いますので廃止します。