有没有办法改变快速修复列表的显示模式

时间:2019-02-08 22:04:55

标签: vim neovim

我正在尝试设置按键绑定,以使用grep和位置列表生成当前文件的功能框架。由于我仅扫描当前文件,因此每行开头的文件名是多余的,并且会使输出的可读性降低。其次,默认的显示模式会在消息开始时删除空格,从而删除有关函数嵌套的信息。

grepformat从默认的%f:%l:%m更改为%l:%m会删除位置列表中每行开头的文件名,但没有名称,它不知道在当前目录中查找。文件,所以我不能跳转到其他功能。

据我所知,浏览errorformatquickfix文档并没有显示任何用于更改quickfix \ location列表显示模式的选项。

这为功能位置列表提供了快捷键绑定,但格式不正确:

grepformat=%f:%l:%m
nnoremap <buffer> <leader>l :silent lgrep! function %<CR>:lopen<CR>

这会提供格式更好但位置无效的位置列表:

grepformat=%l:%m
nnoremap <buffer> <leader>l :silent lgrep! -h function %<CR>:lopen<CR>

注意-h grep选项禁止输出中的文件名

原始grep输出几乎完全是我想要格式化代码的方式:

1:function actigraphyCalculator(dirname)
69:     function [checkedFiles, metadata] = readQcData
75:    function fileContents = openFile(name, filePaths)
80:     function fileContents = qcprocessing(name, fileContents, metadata)
90:    function fileContents = removeBadDays(name, fileContents, metadata)
106:    function path = createSavePath(filepath)

唯一的问题是缩进不一致,并且不同的数字长度导致消息不能完美对齐。

同一文件位置列表的当前输出为:

calcActigraphy/actigraphyCalculator.m|1| function actigraphyCalculator(dirname)
calcActigraphy/actigraphyCalculator.m|69| function [checkedFiles, metadata] = readQcData
calcActigraphy/actigraphyCalculator.m|75| function fileContents = openFile(name, filePaths)
calcActigraphy/actigraphyCalculator.m|80| function fileContents = qcprocessing(name, fileContents, metadata)
calcActigraphy/actigraphyCalculator.m|90| function fileContents = removeBadDays(name, fileContents, metadata)

请注意,消息开头没有缩进。

1 个答案:

答案 0 :(得分:1)

您可以使用:help :syn-conceal从快速修复列表中隐藏文件名。它仍然在物理上(因此导航仍然有效),只是不再显示。

我在how to format vim quickfix entry中找到了基本概念;这是我使用的映射(放入~/.vim/ftplugin/qf_conceal.vim

function! s:ToggleLocation()
    if ! v:count && &l:conceallevel != 0
        setlocal conceallevel=0
        silent! syntax clear qfLocation
    else
        setlocal concealcursor=nc
        silent! syntax clear qfLocation
        if v:count == 1
            " Hide file paths only.
            setlocal conceallevel=1
            " XXX: Couldn't find a way to integrate the concealment with the
            " existing "qfFileName" definition, and had to replace it. This will
            " persist when toggling off; only a new :setf qf will fix that.
            syntax match qfLocation /^\%([^/\\|]*[/\\]\)\+/ transparent conceal cchar=‥ nextgroup=qfFileName
            syntax clear qfFileName
            syntax match qfFileName /[^|]\+/ contained
        elseif v:count == 2
            " Hide entire filespec.
            setlocal conceallevel=2
            syntax match qfLocation /^[^|]*/ transparent conceal
        else
            " Hide filespec and location.
            setlocal conceallevel=2
            syntax match qfLocation /^[^|]*|[^|]*| / transparent conceal
        endif
    endif
endfunction
"[N]<LocalLeader>tf Toggle filespec and location to allow focusing on the
"           error text.
"           [N] = 1: Hide file paths only.
"           [N] = 2: Hide entire filespec.
"           [N] = 3: Hide filespec and location.
nnoremap <buffer> <silent> <LocalLeader>tf :<C-u>call <SID>ToggleLocation()<CR>