在Vim中突出显示文本范围

4

在Vim中,是否可以标记一段文本并更改其高亮颜色(为红色),然后选择另一段文本并更改其颜色(为绿色),同时保留先前的高亮,以此类推?


你到底想做什么? - Adriano Varoli Piazza
现在我需要它用于日志分析:标记有趣的日志行。但我可以想象出许多用例。 - Vereb
5个回答

16

开始入门的基本内容如下:

:hi Green guibg=#33ff33
:syntax region Green start=/\%20l/ end=/\%30l/

功能:

  1. 定义一个名为“Green”的高亮组,并将其背景颜色设置为绿色。
  2. 定义语法区域,该区域应该使用从第20行到第30行的“Green”高亮组进行突出显示。

现在,您可以编写一个函数或命令,它可以获取可视选定的文本,并将其中的一个预定义颜色组应用于它。一旦您有了这个函数,请将其绑定到您的按键上:例如,用 \g 来表示绿色,\r 表示红色等。

更新:

以下是一些 Vim 脚本:

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>

注意:

它不能重新应用高亮(例如从绿色到红色的高亮)。


这正是我在寻找的。非常好的建议。您能否在答案中再添加一件事?我如何指定列号呢?例如从第5行的第12列开始等等。 - user268157
如果您不介意的话,我已经添加了一些我正在寻找的具体内容。 - user268157
3
在Vim中,执行命令:h /\%c可以查看有关正则表达式中列的信息。请注意保持原意,使翻译更加通俗易懂。 - Maxim Kim

5

我相信 Txtfmt 插件就是你所需要的...

Txtfmt (Vim 高亮插件)

Txtfmt 为 Vim 中的普通文本提供了一种“富文本”功能。高亮是通过直接插入隐藏标记字符到缓冲区来完成的,因此高亮是持久的,无需存储元数据。

Txtfmt 可高度配置。默认设置支持 8(可配置)前景色、8(可配置)背景色和所有粗体、下划线和斜体属性的组合(例如,粗体、粗斜体、粗下划线等)。非默认配置支持以下额外属性:突出显示、反转和下划线弯曲。

有一个非常详细的帮助文件,作者也非常乐意回答使用问题...


5

有一个叫做mark的插件/脚本:

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

http://www.vim.org/scripts/script.php?script_id=1238


我认为这个插件只是一种自动创建文本匹配组的方式,可以选择/指定。也许这确实是 OP 想要的,但请注意它会突出显示所有匹配的文本实例,而不仅仅是您选定的特定实例。 - Cascabel
Ingo Karkat正在维护Mark,因为原作者已经放弃了它。https://github.com/vim-scripts/Mark--Karkat - Bodhi

1

看起来Mark plugin可以满足你的需求。一旦安装完成,只需进行可视化选择,然后按下\m即可。


0

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

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


同意。高亮显示是应用于突出显示组的,这些组是通过匹配文件内容(例如语法高亮)来创建的。它们必须在文件中有一些内容才能匹配。Vim是一个文本编辑器,而不是一个文字处理器。话虽如此,根据您想要的具体内容,如果您愿意,可以创建一些自定义语法高亮和基本标记语言。 - Cascabel
我认为如果文本发生变化会是一个问题。但我对仅适用于只读文件的情况很感兴趣。首先,我需要这个来进行日志文件分析。 - Vereb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接