突出显示 VIM 中的任意行



在程序的实现过程中,我一般会插入很多附加代码行,主要是用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 语句进行调试,而是使用包装打印的函数进行调试,怎么样?搜索程序范围和文件范围都非常容易(只需使用 *#搜索调试打印功能的所有出现)。

最新更新