自定义vim突出显示


12

我现在正在编辑一些xml,并且已经给自己留下了一些有关要返回的内容的注释。像这样

<!-- Question: bla bla -->

我现在正在用vim进行编辑,我希望vim现在突出显示“问题”,以便我可以轻松查看代码并找到所有需要查看的地方。我知道我需要在vimrc中添加一些内容,但我认为我可能正在搜索错误的内容。

更新资料

我尝试将其放入我的容器中,.vimrc但没有效果:

syn keyword JakeAnnotation      Question

hi JakeAnnotation gui=bold term=bold cterm=bold

更新2

实际上,我可以看到以前所做的事情产生了一些影响,因为当我这样做时:

:hi

它向我展示了它突出显示的所有内容,其中一项是:

JakeAnnotation xxx term=bold cterm=bold ctermbg=6

并且xxx的格式正确

这使我相信我只是没有正确定义问题。问题是否需要自己排成一行?

更新3

好的,对于用户22303的帖子,我可以进行以下工作:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/

但是我怀疑每个文件只能有一个匹配项。因为当我这样做时:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/
highlight MyRelook cterm=bold term=bold ctermbg=blue ctermfg=black
match MyRelook /Another look/

第一个停止工作。(但是第二个有效)。

Answers:


9

我认为我们一直在为您提供一些不太正确的答案。这是我在计算机上测试过的方法。

首先,创建自己的新高光组:

:highlight MyQuestions guifg=red guibg=green

现在,指定只要匹配模式,突出显示组就会存在:

:syntax match MyQuestions /Question/

那应该开始在每行包含“问题”的文本上突出显示该文本。要扩展以显示整行,您可以将搜索文本更改为具有与整行匹配的通配符,如下所示:

:syntax match MyQuestions /.*Question.*/


实际上,只有排序有效...我怀疑您一次只能参加一场比赛,请参阅更新#3 ...
sixtyfootersdude

1
@sixtyfootersdude:对不起,再次出现小错误。所有的match命令必须改为“语法match”命令。因此,您想使用[:syntax match MyQuestions /.*Question.*/]来代替[:match MyQuestions /.*Question.*/]。这样一来,您就可以根据需要进行多种匹配。实际上,这些是语法文件中最常见的命令类型之一。但是您可以在命令行,vimrc或任何其他脚本中的任意位置执行它们。
user22303 2010年

在我的vimrc文件中添加syntaxinfront match...使匹配完全无效。这是我应该做的地方。对打开的文件进行操作也无效。
sixtyfootersdude 2010年

1
@sixtyfooters:不确定您正在发生什么,但这绝对是这样做的方法。在放入脚本之前,请先在命令行中进行测试(可能会在为您的文件加载的其他脚本中的某处清除语法设置)。定义后,通过发出一个简单的“:highlight”命令(或从gvim的gui菜单中选择“ Syntax”,“ Highlight test”)来检查存在的组以及突出显示的组。请记住,您要先使用高亮命令来创建组,然后使用“语法匹配”来设置匹配模式。
user22303 2010年

@sixtyfooters:我假设您正在终端中运行vim(即,不是gvim),因此仅应设置术语属性。在我看来,当加载新文件并且正在运行关联的语法文件并清除所有以前的语法命令时,语法命令将被清除。因此,只需仔细检查一下,在使用命令行时,是否每次加载文件时都重新输入这些命令?我认为您可以尝试在尚未保存且甚至没有分配文件名的新缓冲区中测试文本。
user22303 2010年

5

您要查找的文件是一个“语法”文件。尝试查看/usr/local/share/vim/syntax//usr/share/vim/syntax/。您想要的文件是xml.vim。

最简单的事情是找到具有

syn keyword xmlTodo         contained TODO FIXME XXX

并将其更改为:

syn keyword xmlTodo         contained TODO FIXME XXX Question

这将在包含文本的任何注释中添加“ Todo”突出显示Question

如果您打算(永远)使用它,最好将xml.vim复制到本地,~/.vim/syntax这样对vim所做的更改将不会覆盖您的自定义语法文件。

更新资料

如果要在任何文件中使用类似的功能(排序),则可以使用“ goto”命令。我承认这就像hlsearch,让您感到恼火。

编辑时,当光标位于单词上时,键入gd以从文件中的当前点gD搜索或从头开始搜索。文件中与当前单词匹配的每个单词都会突出显示。您可以键入n以跳到该单词的下一个实例。

我倾向于这样做,因为使用最少的输入即可获得突出显示和导航。您可以按照通常的方式关闭高亮显示::noh[lsearch]


哇!听起来就像我想做的。我目前没有~/.vim/ folder. If I created it and create the file 语法,我是否需要在某个地方(也许在中.vimrc?)引用它来告诉vim使用它?
sixtyfootersdude 2010年

1
不。Vim自动查找它(以及一些其他目录,例如:插件,颜色,编译器),并且如果您的主目录中存在语法文件,它将优先于系统默认值。
DaveParillo

1
另外,为了清楚 syntaxxml.vim
起见

我应该将.vimrc放入.vim目录吗?
stytyfootersdude”,2010年

1
语法文件放在您的.vim目录中。语法高亮旨在特定于语言。如果要在任何文件中使用类似的功能(排序),则可以使用“ goto”命令。我将其添加到我的答案中。
DaveParillo


2

您有几种选择。
-一个,正如Dominik提到的...可以一个一个地搜索(不是那么实际)
-两个,可以执行“:g / <-Question”以获得所有列表(更好一点) ,给出总体情况)
-第三,如果您仅在xml文件中使用这些注释,则可以设置一个突出显示组(我不知道xml的样子,所以我不知道是否有一些注释)以及其中的其他评论)。如果在vimrc中进行设置,那会很好,因为当您使用新版本刷新vim时,xlm.vim文件将消失。


+1我喜欢这个:g/建议,但是如果“问题”没有立即跟在评论标签之后,可能很难应用。
DaveParillo 2010年

@DaveParillo-啊,是的。好吧,就像我说的那样,我对xml一无所知,所以我认为它一直都是这样。
Rook

如何设置突出显示组?
sixtyfootersdude 2010年

1
@sixtyfootersdude-参见“ :: help e410”。
Rook

@Idigas:感谢您的参考。看看,但仍然无法解决我的问题。我在问题中添加了更新。谢谢。
sixtyfootersdude 2010年

1

您不一定需要将命令放在vimrc中。您始终可以只在命令行中输入它,然后在不想再突出显示时将其清除。命令将如下所示:

:hi问题guifg =红色guibg =蓝色gui =粗体

在gvim中(即带有gui的vim),它将设置前景(guifg),背景和常规字符设置。

如果您想摆脱这种困扰,请执行以下操作:

:hi问题明确

在终端中使用vim可以修改为使用以下命令:

:hi问题ctermfg =红色ctermbg =蓝色术语=粗体

当然,您可以将其中的任何一个都放在vimrc中,也可以将gui和term标志组合到单个hi命令中。


[在我阅读另一位海报的答案之后添加]

抱歉,我假设您问题线的语法已经与Vim内置的“问题”突出显示标签的语法文件设置匹配。只需查看提到vim的xml语法文件的其他答案,然后您就可以使用ToDo高亮组而不是Question发出上述命令。


尝试过:hi问题ctermfg =红色ctermbg =蓝色术语=粗体,但没有效果。
sixtyfootersdude 2010年

抱歉,:hi命令只是确定了如何突出显示“问题”组。现在,您必须指定哪些文档区域属于“问题”组。您可以使用match命令执行此操作::match Question / [搜索模式] /,或者您的情况::match Question / Question /
user22303 2010年

0

我迟到了,但我使用TODOFIXME正是这种情况。

在大多数TODO示例中,即使不是全部,colorschemes也会通过以下背景颜色,下划线和斜体的组合突出显示:

<tree>
  <!--TODO : do I have to add a trunk tag ?-->
  <branch>
    <leaf>caterpillar</leaf>
    <leaf>caterpillar</leaf>
  </branch>
</tree>

它在语义上并不合适,但是从纯粹的功能角度来看,它可以很好地工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.