Vim の Julialang シンタックスハイライトについて
Vim の julialang 用シンタックスハイライト はなかなか控えめで渋くて好きです。 (Vim script 用のなんかは書いていると、ちょっと色が多すぎるな…と思ったりします。) ただ、括弧がハイライトされると視覚的に便利かなー、と思うので改造しようかと思っていたら、実はすでに構文グループが存在していた、ということを最近知りました。
なので括弧に色を付けたい場合は、~/.vim/after/syntax/julia.vim
あたりに追記すればいいということですね。
highlight link juliaParDelim Delimiter
ハイライトグループ Delimiter
は普通 Special
にリンクされてると思います。 :help group-name
さらにコンマも色を付けたい場合は
highlight link juliaComma Delimiter
なんですけど、画面に色がつきすぎる感じもする。
julia-vim に Pull request を送りました
Julia も Vim で書いてるんですけど、結構な頻度でドキュメントを見たくなります。 Vim script を書く時の :help
コマンドに慣れすぎているのでこのくらいの気軽さで Julia のドキュメントをひければいいのに、と思っていました。ので、書きました。
K
キーでカーソル下のキーワードのドキュメントを開きます。また、 <Plug>(julia-doc-prompt)
を ?
あたりにマップしておけばREPLのそれのように使えます。
まだ、 merge されるかわかりませんが、されてほしいです。:terminal
コマンドあるじゃん、と言われれば確かにそうなんですけど、:terminal
叩いてREPL立ち上げてって結構面倒じゃないですかね?改善案とかあれば件の issue にお願いします。
※ 2018/8/6 追記 Merge されました!めでたい
ここから、余談。本当は keywordprg
オプションの設定だけで済ませたかったんだけど、 Julia の場合 @macro
や funcname!
が有効なキーワードなので iskeyword
オプションも変更しなければならなかった。これだけならまだ提案してたかもしれないけど、 !bool
と書くとこんどは真偽値の反転なので !
を iskeyword
に含めるのはちょっと... ということで K
キーにマッピングする形になってしまった。その点指摘されてるけど、いかんともしがたい。いい方法ないかな...
※ 2018/4/4 追記
紆余曲折の末、何とか 'keywordprg'
オプションを使う形に持っていけました。
vim-multiselect を書きました
Vim に複数選択があったら、という感じの実験、コンセプトモデルのようなものを書きました。正直、基本的に :substitute
とか :global
みたいなのをつかってしまうのでいまいち使えてないんですけど、なんか面白い使い方でも見つからないかなー、と考えています。
- 選択機能を提供
- 編集機能を提供
肝心の大量処理はだいぶもっさりなのが残念なんですけど、 broadcasting textobjects
って呼んでいる仕組みがあってこれはなかなか便利な感じがします。矩形選択の延長のような使い心地。デモです。
Vim の TextYankPost イベント
Vim 8.0.1394 にてオートコマンドイベント TextYankPost
が実装されました。
ヤンクコマンドなどでレジスタが更新された際に処理をフックすることができます。名前に Yank
とありますが、 d
コマンドや c
などもレジスタを更新するので同様に TextYankPost
を呼びます。このパッチはイベントとともに v:event
という変数を提供しており、これを通して関連する情報を取得できます。
" TextYankPost を発火したオペレータコマンド autocmd TextYankPost * echomsg v:event.operator " ヤンクされたテキスト (行ごとに分割された文字列のリスト) autocmd TextYankPost * echomsg string(v:event.regcontents) " 更新されたレジスタ autocmd TextYankPost * echomsg v:event.regname " レジスタの種類 (:help getregtype()) autocmd TextYankPost * echomsg v:event.regtype
この機能の原型は実はかなり昔に提案されたものだったんですが、ついに取り込まれました。
個人的な所感というか予想ですが、あまりにも限られたプラグイン、いわゆる Yankring 的なもののための機能!という感じで、そういう点で後に回されていたのかもしれません。とはいえ、かくいう私ものどからゲロでるほど欲しかったのでうれしいです。早速ビルドしました。近々vim-highlightedyankもアップデートするので Vim をビルドしましょう。(古い Vim で使えなくなるわけではないです)
追記:
あと、いじっていて気が付きましたが、何もレジスタを指定しないと v:event.regname
が空なので、ユーザがコマンドにレジスタを明示的に指定したかしていないかを判別できますね。つまり ""yy
と yy
を見分けられます。これ、 v:register
では実現できないのでユーザ定義オペレータを作るときに困っていたのですが、 TextYankPost
ごしなら限定的に可能になりました。使い道は…ないかな。
アンドゥした位置をハイライトする Vim プラグインを書きました
Atom text editor の Vim エミュレータ、 vim-mode-plus に関する発表 を見ました。以前からアイデアの宝庫だと感心していましたが、もはや単なるエミュレータの域を超えているように思います。
スライドを見ていて、アンドゥした位置がハイライトされているのが面白かったので早速パクりました。
シェルコマンド diff
を使って変更を検出してハイライトします。 diff
コマンドの出力は行単位なのですが、もうひと頑張りしています。正直しないほうが良かったかも、と後悔しています。コードを書くのは楽しかったんですけど。
正直、ちょっともっさりしていて常用には向かないかも。 どんな編集をしたかは Vim のアンドゥツリーに残っていないので必ずしもハイライト位置は編集位置と一致しません。これは今のところ Vim script に提供されているインターフェースではどうにもならないと思います。
最初は削除される文字列と挿入される文字列の両方をハイライトしてたんですけど、邪魔だなぁ、という感じだったので止めました。一応、試すことはまだできます。
let g:highlightedundo#highlight_mode = 2
何回アンドゥ・リドゥできるのかを取得するのが一番難しかったです。
UD デジタル教科書体
Windows update done. 楽しみにしていた UD デジタル教科書体に等幅があると知ったので喜び勇んで Vim の 'guifontwide'
オプションに設定してみました。いい…。
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
にせざるを得ないのだけ気持ちが悪いです…。