Vim-quickfix-详述
可查看 :h quickfix
中的文档. 也可参考 http://neovim.io/doc/user/quickfix.html#grep.
简述
quickfix 的基本理念是, 保存 compiler 产生的错误信息, 并可以用 vim 在 errors 之间跳转.
在 Vim 中, 也可以借助 quickfix 来访问匹配文本的位置, 如使用 :vimgrep
查找的 pattern matches, 可以通过 getqflist()
函数来获取这些位置信息.
相关概念
quickfix-ID
每一个 quickfix list 都有一个唯一的标识符 called the quickfix ID, 其在一个 Vim session 中都不会改变.
可以用 getqflist()
函数来获取这些 identifier.
一个 quickfix list 可以由 :vimgrep
, :grep
, :helpgrep
, :make
来创建.
location list
一个 location list 是 window-local quickfix list, 可以用 :lvimgrep
, :lgrep
, :lhelpgrep
, :lmake
这些命令创建.
其与 quickfix list 是相互独立的, 其只与一个 window 有关. 当前 window spite 之后, 也会产生一个 location list 的复制.
可以用 getloclist()
函数来获取 location list 的 id.
quickfix-changedtick
每一个 quickfix 和 location list 都会有一个 read-only changetick variable 用于追踪 list 的总的变化次数. 每一次修改 quickfix list 中的内容, 这个变量都会加一.
changetick 的值也是通过 getqflist()
和 getloclist()
函数来获取.
当前 window 被 autocommand
关闭后, 这个值会被舍弃 (即重新计数).
当前 quickfix or locatioin list 被 autocommand
修改后, changetick 也会被舍弃.
quickfix-title
每一个 quickfix and location list 都有一个 title. 默认情况下 title 为 the command that created the list.
可以从 getqflist()
和 getloclist()
函数中获取 title.
可以用 setqflist()
和 setloclist()
函数来修改 title:
1 |
|
quickfix-index
即当前 quickfix/location list entry 在 list 中的位置.
同样用 getqflist()
和 setqflist()
函数获取.
1 |
|
对于一个新的 quickfix/location list, 第一个 entry 会被 selected 且其 index 为 1.
任何 list 中的 entry 都可以用 setqflist()
和 setloclist()
函数来设置称当前 selected entry.
1 |
|
quickfix-size
即 quickfix/location list 的大小, 可以用 getqflist()
和 getloclist()
函数来获取.
1 |
|
quickfix-context
任何 Vim 类型都能够用 setqflist()
和 setloclist()
函数来设置 a context with a quickfix or location list.
可以用 getqflist()
和 getloclist()
函数来检索 quickfix/location list 中的 context.
1 |
|
make
:mak[e][!] [arguments]
用于执行一些预定义的指令.
所有和 QuickFixCmdPre 的 autocommands 都会被触发.
(QuickFixCmdPre
为一个 event, 其在一个 quickfix command 运行前触发.)
如果不加上 !
, 则会跳转到第一个错误位置.
vimgrep 和 grep 的使用
vimgrep
属于 internal grep. 其使用 Vim 自己的搜索引擎.
grep
属于 external grep, 其基于命令行工具 grep
.
vimgrep
1 |
|
g
, 一行如果有多个 matched 会被加入多次j
, 不加上j
则会自动跳转到 first matchf
, 使用fuzzy-matching
运行 vimgrep
时, QuickFixCmdPre
和 QuickFixPost
两个 events 会被触发.
grep
1 |
|
其运行时会调用外部的 gerp
且默认会开启 -n
(--line-number
, 显示行号) 选项.
可以通过设置 grepprg
选项来修改参数.
copen
:copen
可以查看 quickfix 列表.