Skip to content

feature request: 使用 ’quickfixtextfunc‘ 整理输出的内容 #298

@mao-yining

Description

@mao-yining

现在使用quickfix的输出内容总是会在左侧有两个竖线ll。在复制错误信息的时候不太友好。建议使用 ’quickfixtextfunc‘ 整理输出的内容。

10. 定制快速修复窗口				*quickfix-window-function*

快速修复窗口和位置列表窗口显示行的缺省格式是:

    <filename>|<lnum> col <col>|<text>

每行显示的值对应于 |getqflist()| 函数返回的 "bufnr"、"lnum"、"col" 和 "text"
字段。

对有些快速修复/位置列表而言,显示的文本需要定制。例如,如果快速修复项目只有文
件名,文件名后的两个 "|" 字段分隔符是多余的。另一个用例是定制文件名显示的路径
部分。缺省,不在当前目录树下的文件会显示其完整路径 (可能过长)。文件路径可能需
要简化为公共的父目录。

可通过设置 'quickfixtextfunc' 选项为一个 Vim 函数来定制显示的文本。此函数调用
时会带一个字典参数,并应返回字符串的列表,它们会在快速修复或位置列表窗口中显
示。此字典参数会包含以下字段:

    quickfix	为快速修复列表调用时设为 1,为位置列表调用时设为 0。
    winid	对位置列表而言,设为位置列表所在的窗口 id。快速修复列表则设为
		0。可通过 getloclist() 调用以获取位置列表项目。
    id		快速修复或位置列表标识符
    start_idx	应返回文本的首个项目
    end_idx	应返回文本的末个项目

对应从 start_dx 到 end_idx 的每个项目,此函数应返回在快速修复窗口显示的的单行
文本。此函数可通过指定快速修复列表标识符 "id" 调用 |getqflist()| 函数来获取项
目的相关信息。对位置列表而言,可用带 "winid" 参数的 getloclist() 函数。如果该
函数返回空列表,使用缺省格式来显示所有项目。如果返回列表中的某项目为空串,使用
缺省格式来显示其对应项目。

如果需要特定于某快速修复或位置列表的定制,可用 |setqflist()||setloclist()|
函数来设定该列表中的 'quickfixtextfunc' 属性来覆盖全局的 'quickfixtextfunc' 选
项。

下例在快速修复窗口中显示旧文件列表 (|v:oldfiles|)。因为没有和每个项目相关联的
行号、列号和错误文本信息,'quickfixtextfunc' 函数只返回文件名。
示例: >
    " 从 v:oldfiles 来建立快速修复列表
    call setqflist([], ' ', {'lines' : v:oldfiles, 'efm' : '%f',
					\ 'quickfixtextfunc' : 'QfOldFiles'})
    func QfOldFiles(info)
	" 获取一段快速修复项目范围的相关信息
	let items = getqflist({'id' : a:info.id, 'items' : 1}).items
	let l = []
	for idx in range(a:info.start_idx - 1, a:info.end_idx - 1)
	    " 使用简化的文件名
	  call add(l, fnamemodify(bufname(items[idx].bufnr), ':p:.'))
	endfor
	return l
    endfunc
<

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions