Vimで独自のロケーションリストをつくる

Vim

{{ page.title }}

TeX のアウトラインを出すプラグインを作るときに自分でロケーションリストを作る方法を調べたのでまとめる。

Zenn のスクラップはここ

表示させるメッセージは以下とする。

各行は メッセージ:行番号 とする。

let messages = [
    \ 'section:1',
    \ 'subsection:4',
    \ 'section:5',
    \ 'subsection:7',
    \ 'subsubsection:10',
    \ ]

ロケーションリストを表示するために必要なものは次の 3 つだと思われる。

  • ファイル名(%f)
  • 行番号(%l)
  • メッセージ(%m)

行ジャンプしないなら %l はいらないかも。

messagesに ファイル名を付け足す。

call map(messages, {_,v -> expand('%') .. ':' .. v})

このままではデフォルトの errorformat に適合しないため、errorformat を変更する。
(元の errorformat は退避)

let save_eft = &errorformat
let &errorformat = '%f:%m:%l'

ロケーションリストを開く。
ついでに退避させていた errorformat を戻す。

lgetexpr messages | vertical botright lopen
let &errorformat = save_eft