在程序的实现过程中,我一般会插入很多附加代码行,主要是用print命令,以帮助我理解和调试实现的程序。不幸的是,我通常会忘记哪些行来自代码并附加了 with,应该在一段时间后删除。对于大型程序,此问题变得更糟。
好吧,我发现这篇文章教如何保持一个任意用户选择的行突出显示(请参阅部分:光标移动后保留的突出显示)。本文给出的解决方案是在 .vimrc 中包含以下代码:
:nnoremap <silent> <Leader>l ml:execute 'match Search /%'.line('.').'l/'<CR>
因此,每次我按\l时,当前行都会突出显示并保持如此,而先前突出显示的行(如果有)将不突出显示。
这不是我想要的行为。相反,我希望能够突出显示任意数量的行,而无需取消突出显示先前突出显示的行。如果可能的话,使用像 \l 这样的唯一命令。
有人知道解决方案吗?
提前谢谢。
已编辑:
约勒诺耶提出的命令解决了最初的问题。但是,现在提出了其他问题。以下命令:
:call clearmatches()
建议清理突出显示的行可以清除所有行,我希望能够清理特定的突出显示行,而不是一次清除所有突出显示的行。可能吗?
我经常用 C 语言编程,并且在调试时往往会在代码中加入调试打印。
我使用 vim 命令
:syntax match Error /<debug_printf>/
以确保单词"debug_printf"以特定配色方案的默认"错误"颜色突出显示。
这并不能帮助您为一系列行添加书签,但为此您应该查看"书签"插件,该插件允许您在整个文件中创建和删除书签。
VIM 书签插件
:match
只接受一个匹配项。
请改用matchadd({highlight-group}, {pattern})
函数,例如:
nnoremap <silent> <leader>l :call matchadd('Search', '%'.line('.').'l')<cr>
要清除添加的匹配项,请运行 :call clearmatches()
。
我用这里的答案想出了这个组合,我认为这很好:
" l to highlight a line
nnoremap <silent> <leader>l :call matchadd('Search', '%'.line('.').'l')<CR>
" L to remove highlighted line
nnoremap <silent> <leader>L :
for m in filter(getmatches(), { i, v -> has_key(l:v, 'pattern') && l:v.pattern is? '%'.line('.').'l'} )
<BAR> :call matchdelete(m.id)
<BAR> :endfor<CR>
我认为你的第一段解释了你的问题,与 vim 无关,所以也许你不需要使用 vim 来解决你的问题。
如果不使用常规的 print 语句进行调试,而是使用包装打印的函数进行调试,怎么样?搜索程序范围和文件范围都非常容易(只需使用 *
或#
搜索调试打印功能的所有出现)。