如何更改 vim 中的 quickix 标题(状态栏)?

如何更改 vim 中的 quickix 标题(状态栏)?

我有以下内容makeprg在 vim 中编译我的 tex 文件:

setlocal makeprg=pdflatex\ \-file\-line\-error\ \-shell\-escape\ \-interaction=nonstopmode\ $*\\\|\ tee\ \/dev\/tty\ \\\|\ grep\ \-P\ ':\\d{1,5}:\ '

这给了我很好的结果(错误显示正确,忙碌时显示 tex 编译,......)

然而,有一件事让我不满意:当出现错误并且快速修复窗口弹出时,其状态栏上充斥着 makeprg 字符串:

pdflatex\ \-file\-line\-error\ \-shell\-escape\ \-interaction=nonstopmode\ $*\\\|\ tee\ \/dev\/tty\ \\\|\ grep\ \-P\ ':\\d{1,5}:\ '

有没有办法改变快速修复标题/状态栏?

答案1

经过一番挖掘和实验,我们发现 quickfix 窗口的“状态行”设置为

%t%{exists('w:quickfix_title')? ' '.w:quickfix_title : ''}

不幸的是,w:quickfix_title 变量直到 quickfix 缓冲区和窗口创建后才会定义,因此您无法使用自动命令取消定义 (:unlet) 或设置 w:quickfix_title 的值。但是,您可以使用自动命令设置 'statusline' 的值,因此将其放入 ~/.vimrc 中应该可以解决问题。

au BufWinEnter quickfix setl statusline=%t

答案2

最近版本的 vim 有一个quickfix 字典中的 'title' 字段

每个快速修复和位置列表都有一个标题。默认情况下,标题设置为创建列表的命令。getqflist() 和 getloclist() 函数可分别用于获取快速修复和位置列表的标题。setqflist() 和 setloclist() 函数可分别用于修改快速修复和位置列表的标题。示例:

call setqflist([], 'a', {'title' : 'Cmd output'})
echo getqflist({'title' : 1})

写入此字段会破坏w:quickfix_title,但反之则不然。

使用 setqflist 对 quickfix 标题的修改在:colder/之间持续存在:cnewer,因此您可以在初始加载时使用自动命令清除它们,并且它们应该永久保留该名称:

autocmd QuickfixCmdPost * call setqflist([], 'a', {'title' : 'Quickfix Title'})

相关内容