Hatena::Grouphackathon

zrail (a.k.a. tobira17, h14i, ...) の Learning Log

2017-05-21

[][]シンタックスファイルの作成 23:33 シンタックスファイルの作成 - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク - シンタックスファイルの作成 - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

メモ。多分随時更新。

シンタックスファイル職人を目指そうと思っているのでなければ止めておくのが吉。

  • Q. 既存のシンタックスファイルがあるけど、気に入らないので自前のものを作りたい
    • A. やめておけ(既存のものをafter以下で拡張・修正する程度にしておけ)
  • Q. シンタックスファイルが存在しないので作りたい
    • A. キーワードとリテラルをハイライトするくらいで満足しよう(まともに構造を扱おうとするとパズルになる)
  • Q. でも fdm=syntax でフォールドしたい
    • A. コードブロックのはっきりしてる(開始と終了のトークンがある)ような言語なら書いてもいいんじゃないでしょうか(MLみたいなほとんど式だけで構成されるような言語はやめておいたほうが……)

[][][]シンタックスファイルの作成 for OCaml 23:44 シンタックスファイルの作成 for OCaml - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク - シンタックスファイルの作成 for OCaml - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

割と地獄。

いや自分のスタイルだけは正しくハイライトとフォールドできる、みたいな奴ならそんなに大変じゃないんだけど、汎用っぽいのを書こうとするとなぁ。

僕はばんばんターミネータを置く派なので……。

外部のパーサでシンタックスファイルの生成してもらって適切なタイミングで読み直すとかしたいレベル。

2017-02-11

[][]最近のマイヴィムアールシー 00:19 最近のマイヴィムアールシー - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク - 最近のマイヴィムアールシー - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

外部プラギンに関して

一時期はプラギンジャンキー的な感じで色々入れてたんだけど、最近はだいぶ落ち着いてきた。

といってもやっぱり手放せないものはそれなりにある。

例えば kana さんの vim-*-user (とその上に乗る拡張)とか、 thinca さんの quickrun とか ref とか。

それから vim 本体には(まだ)バンドルされていない、新しめの言語用(例えば vim-rust)のプラギンとか。

インサートモードに関して

上とも関連するんだけど、自動(でポップアップまでしてくれる系の)補完プラギンを使うのを止めた(スニペット展開の emmet.vim は使ってるけど)。

使うのを止めた理由はいくつかあるんだけど、一番大きい理由としては動作の重さがある。

どういう状況で重いかは設定にもよるし一概には言えないんだけど、思い出に残るつらかったシチュエーションは rubycomplete.vim の編集中……。

オリジナルの rubycomplete.vimVim script の中で if_ruby を使ってたり #get_completions がめっちゃ長かったりと重くなりそうな要素がいくらかあるので仕方無いと言えば仕方無いんだけど、ファイルサイズ自体はそれほどじゃない(Vim 8.0-324 時点での同梱版 rubycomplete.vim は 833行、24361バイト)。

こいつを開くたびに自動補完をオフにする、あるいはそのための autocmd の設定をするのは面倒だったので、自動補完なプラギンの使用自体を止めた。

ただし念の為に書いておくと、自動(でポップアップまでしてくれる)補完プラギン自体が駄目なわけではない。

よく知らない言語の勉強中や書き捨てファイルの編集中なんかには非常に役立つと思う。

ただまぁ、僕の場合は <C-X> な補完で十分だなぁと思ったわけです。

&include と &define に関して

とりあえず $VIMRUNTIME に移動して

grep -E 'include\s*=' **/*.vim

とか

grep -E 'define\s*=' **/*.vim

すると分かるんだけど、大抵のファイルタイプのデフォルト値はあんまり良くないんですよね。特に &define のほう。

&path は環境にもよるし、適宜頑張って設定する(か、バッファ毎にベタっと設定するか)しかないんだけど、上の2つはもっと頑張れるんじゃないかなぁと思ってて、色々試してみている。

例えば \@> (強欲な量指定子)を(適切に)使ったりすると検索対象が多い場合にいくらか速くなるような気がしている。

追記。

&defineは本来?マクロ定義の検索のためにあるんだけど、現在はマクロ定義がないようなファイルタイプも数多く存在していて、そのようなファイルタイプで[dとかi_CTRL-X_CTRL-Dを使わないのは勿体ないよなぁ、というスタンスです。

2015-08-23

[][][]universal-ctags の Dscanner ドライバ書いた 01:24 universal-ctags の Dscanner ドライバ書いた - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク - universal-ctags の Dscanner ドライバ書いた - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

例によって gist 。

Dscanner driver for universal-ctags ? GitHub


適当に設置すれば動くと思う。

--list-kindsを見るようになってるのがつらいなぁ。今回のケースだとハードコードせざる得ないっぽい。(dscanner が受け付けない)


なんか最近 Dscanner の周辺ツールばかり書いてるけど、実はあんまり Dscanner 使ってない……。

本当は DCD をちゃんと使いたいんだけど、 vim のプラギンの出来がイチマチなんだよなぁ。

自分で補完関数書いてしまおうかとも思ってるけど、そこまでのやる気も出ず。

2015-07-24

[][]compiler/dscanner.vim 書いた 06:06 compiler/dscanner.vim 書いた - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク - compiler/dscanner.vim 書いた - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

大したことしてないのでgistに置いてあります。

https://gist.github.com/h14i/117d5d2f95d953e072b6


以下メモ。

久しぶりにコンパイラプラギン書いて知ったんだけど、エラーとワーニングの認識のために %t ってのを使うんですね。

んで、サンプルには %trror とか %tarning とか書いてあるわけですよ。

これって非常に気持ち悪くないですか?

もしかしてもっと良い書き方があるのかな…。

あと &efm 書くのが結構つらい。scanf 風のフォーマットってのがなぁ。

パターンマッチも出来るみたいだけど、 % の乱舞になってしまって読むのがつらくなる。

自前でパースして Quickfix に流し込むのよりは遥かに楽なので仕方無く使う感じですかね。

2015-07-19

[]ctrlp-buftab.vim 直した(追記 直ってなかった) 04:46 ctrlp-buftab.vim 直した(追記 直ってなかった) - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク - ctrlp-buftab.vim 直した(追記 直ってなかった) - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

今回の変更

  • tabpagebuffer.vim への依存を無くした。
  • buflistedではないバッファを表示してしまうバグを直した。(致命的なのに今更…。)

BufEnter のタイミングで b:ctrlp_buftab_tabnr って変数をセットするようにしたので NeoBundleLazy などで遅延読み込みさせるとちゃんと動きません。

追記。

相変わらずバグってます。

github issueに書いたけど…。