2012/11/19

Recent entries from same category

  1. clangd を使う時に便利なコマンド compiledb
  2. VimConf 2018 に行ってきた。
  3. Software Design 2018年7月号「Vim 絶対主義」の執筆に参加しました。
  4. Vim の :terminal の中から外の Vim を操る方法
  5. Vim と日本語入力の話。

Twitter / kanonji

vimでカーソルキーを使うと稀に発生する「E349: No identifier under cursor」がうざい。ググっても、このエラーメッセージの翻訳定義ばかり出てくるなぁ。TERM=ansiにすると出ないというブログエントリーは有ったけどxterm-colorがいいなぁ

https://twitter.com/kanonji/statuses/270488019499356160
アレっと言っても、僕はカーソルキー使わないから発生しないんだけど、調べてみた。
まず E349 を調べる。
# grep E349 *.c
normal.c:static char *e_noident = N_("E349: No identifier under cursor");
E349 は e_noident という変数を使って発生させている。e_noident は同じく normal.c の中で2箇所から参照される。どちらもカーソル下のキーワードを探す際にキーワードとなり得る物が見つからなかった場合に発生する。
試しに「-」という文字だけタイプしてその上で K (辞書を引くキー)をタイプすると、E349 が発生する。
さて、ここでなぜ「vimでカーソルキーを使うと E349 が稀に発生する」のか。
terminfo によると xterm ではカーソルキーの左 kl は \E[D に割り当てられており、:echo getchar() によると vim ではシフトキーを押しながらカーソルキーの左を押すとこの \E[D が投げられる。

http://www.nethamilton.net/docs/termcap.html
http://linux.die.net/man/5/termcap
このキーシーケンスは xterm-color には登録されていないので
      ESC
      [
      D
の順に流れる。:help [D を見ると
[D          Display all macro definitions that contain the macro
            under the cursor.  Filenames and line numbers are
            displayed for the found lines.  The search starts
            from the beginning of the file.  {not in Vi}
マクロを検索している。つまりカーソル直下のキーワードを探索しているのだ。
ゆえに、E349 が出るという事になる。
Posted at by | Edit


blog comments powered by Disqus