突出显示Vim中的文本范围

突出显示Vim中的文本范围,vim,vi,Vim,Vi,是否可以在Vim中标记一个文本范围并将其高亮显示颜色更改为红色,而不是选择另一个文本范围并将该颜色更改为绿色,以保持前一个高亮显示,依此类推?我不知道有任何方法可以这样做,因为它需要存储与文件实际内容无关的元数据。即使它只在Vim运行时存在于内存中,我也不知道如何实现它 这并不意味着没有办法,因为我对Vim的了解有限。但似乎Vim不会这么做。有一个名为mark的插件/脚本: 马克:一个小脚本,可以同时突出几个不同颜色的单词。例如,当您浏览一个大程序文件时,可以突出显示一些关键变量。这将使跟踪源代

是否可以在Vim中标记一个文本范围并将其高亮显示颜色更改为红色,而不是选择另一个文本范围并将该颜色更改为绿色,以保持前一个高亮显示,依此类推?

我不知道有任何方法可以这样做,因为它需要存储与文件实际内容无关的元数据。即使它只在Vim运行时存在于内存中,我也不知道如何实现它


这并不意味着没有办法,因为我对Vim的了解有限。但似乎Vim不会这么做。

有一个名为mark的插件/脚本:

马克:一个小脚本,可以同时突出几个不同颜色的单词。例如,当您浏览一个大程序文件时,可以突出显示一些关键变量。这将使跟踪源代码变得更容易


首先要做的基本工作是:

:hi Green guibg=#33ff33
:syntax region Green start=/\%20l/ end=/\%30l/
它的作用是:

用绿色背景色定义“绿色”突出显示组。 定义语法区域,从第20行到第30行用“绿色”突出显示组突出显示。 现在,您可以编写一个函数或/和命令,该函数或/和命令获取视觉上选定的文本,并对其应用多个预定义颜色组之一。一旦你有了这个功能-将它绑定到你的键上:例如\g代表绿色,\r代表红色

Upd:

这里有一点vimscript:

function! HighlightRegion(color)
  hi Green guibg=#77ff77
  hi Red guibg=#ff7777
  let l_start = line("'<")
  let l_end = line("'>") + 1
  execute 'syntax region '.a:color.' start=/\%'.l_start.'l/ end=/\%'.l_end.'l/'
endfunction

vnoremap <leader>g :<C-U>call HighlightRegion('Green')<CR>
vnoremap <leader>r :<C-U>call HighlightRegion('Red')<CR>
注:

例如,它无法将高亮显示的绿色重新应用为红色。

看起来它可以满足您的需要。安装后,只需进行视觉选择并按\m.

我相信Txtfmt插件就是您想要的

Txtfmt为Vim中的纯文本提供了一种富文本功能。突出显示是通过直接插入缓冲区的隐藏标记字符完成的,因此突出显示是持久的,而不需要将元数据存储在文件之外

Txtfmt是高度可配置的。默认设置支持8种可配置的前景色、8种可配置的背景色以及粗体、下划线和斜体属性的所有组合,例如粗体、粗体斜体、粗体下划线等。。。。非默认配置支持以下附加属性:突出、反向和反向


有一个非常广泛的帮助文件,作者非常乐意回答使用问题…

您到底想做什么?现在我需要它来进行日志分析:标记有趣的日志行。但我可以想象许多用例。同意。突出显示应用于突出显示组,突出显示组通过匹配文件内容(例如语法突出显示)进行。文件中必须有匹配的内容。Vim是一个文本编辑器,而不是文字处理器。也就是说,根据您的具体需要,您可以创建一些自定义语法高亮显示和基本标记语言(如果您需要的话)。我认为如果文本发生更改,这是一个问题。但我对只适用于只读文件的情况感兴趣。首先,我需要它来分析日志文件。我相信这个插件只是一种自动为你选择/指定的文本创建匹配组的方法。也许这确实是OP想要的,但请注意,它最终会突出显示匹配文本的所有实例,而不仅仅是您选择的特定实例。Ingo Karkat现在正在处理Mark,因为原作者已经放弃了它。这就是我要找的。很好的提示。你能在你的答案上再加一点吗?如何指定列号?比如从第5行的第12列开始,等等?如果你不介意的话,我已经添加了一些我一直在寻找的细节。@SazzadBinKamal do:h/\%c在vim中,以获取有关vim regexps中列的信息。