Hatena::Grouphackathon

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

2018-04-12

[][]:commandの引数でハマった 06:35 :commandの引数でハマった - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク - :commandの引数でハマった - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

:command で定義したユーザコマンドに特殊文字(#とか%とか)を含む文字列(今回の場合はgrepのラッパだったので検索パターンとパス)を渡して、それをそのままユーザ定義関数に渡す、というケースでハマった。

問題の原因は :command に -complete=dir を付けていたことで、これのせいでユーザコマンドに引数が渡る前にVim特殊文字として展開されていた。ちなみに検索しようとしていたのはVimのオートロード関数……。

多分、補完関数を自前で定義すれば大丈夫だと思う。

今回はグロブなパスも渡すことを考慮して補完は必要ないと判断した。というか再帰オプションを付けることが多いので……。

なので試してない。

2017-11-11

[][]ローカルWiki的な奴作りたい その2 01:08 ローカルWiki的な奴作りたい その2 - zrail (a.k.a. tobira17, h14i, ...) の Learning Log を含むブックマーク はてなブックマーク - ローカルWiki的な奴作りたい その2 - zrail (a.k.a. tobira17, h14i, ...) の Learning Log

このページに書いたように以前はhowmとか使ったり、半自作のスクリプト使ったり、今考えると自分でも信じられないが、Evernoteを使ったりしてた。(流行ってたからね!)

EmacsからVimに乗り換えたとき、QFixHowmはイマイチ好みじゃなかったのでhowmは諦めてしまった。

また、上のVim scriptは1メモ=1ファイルという仕様で、書くときには非常に便利なんだけど、grepできない(キーワードが分からない)ケースなどある時期(あるいは量)のメモをまとめて読みたいときなんかには向いていない*1のであった。まぁ検索できるならメモしないよな。

Evernoteはまぁその特に言いたいことはないんだけど、CUIな環境に染まりきってしまった体にはメモの読み書き程度のことで専用クライアントとかブラウザを起動するのはつらすぎるんだよね。

*1:そういうことが快適にできるように直せばいい話なんだけど。久し振りに:JunkDiary経由で作ったメモ群からTODOを探したら拡張案がいくつか書いてあった。

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 。

no title


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

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


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

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

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