个性化你的Vim -- 个性化高亮显示

Hacking Vim 中文翻译 by Alec [email protected]

[Vim]6+ [GVim]6+ 个性化高亮显示

在Vim中, 高亮显示的高亮叫作匹配.

通过匹配, 你可以让Vim标识很多的字母组合, 单词, 数字, 句子和行. 你甚至可以Vim应该如地去标注(错误去红色, 重要的字用绿色等等).

用下面的命令可以做匹配操作:

:match Group /pattern/


这条命令有两个参数. 第一个是你要在高亮显示方案中的颜色组合.

和配色方案相比, 配色方案是全局的颜色设置, 而颜色组合只是前景色或背景色的小的组合用来为匹配操作使用的. 当Vim启动时, 它会根据你的本色方案, 将一大堆的颜色组合设置成默认的颜色.

想看完整的颜色组合, 使用这个命令:

:so $VIMRUNTIME/syntax/hitest.vim


第二个参数是你想要匹配的模式字符串(pattern). 这个模式是一个正则表达式, 并且根据你想要匹配的内容, 从非常简单要相当得复杂. 一个比较简单的匹配命令就像下面这样:
:match ErrorMsg /^Error/


这个命令就会去查找以Error开始的所有行(通过一个^来表示行开始). 如果找到了一个匹配, 就会被标识成ErrorMsg颜色组的颜色(红底白字).



如果你不喜欢任何一个已有的颜色组合, 你也可以定义你自己的. 使用这个命令:

:highlight MyGroup ctermbg=red guibg=red gctermfg=yellow guifg=yellow term=bold


这个命令创建了一个叫做MyGroup的颜色组合, 红色的背景, 黄色的文本, 终端模式和图形模式的都可以. 你可以根据你的喜好改变下面的选项:
• ctermbg      : Background color in console

• guibg        : Background color in Gvim

• ctermfg      : Text color in console

• guifg        : Text color in Gvim

• gui          : Font formatting in Gvim

• term         : Font formatting in console (for example, bold)


如果你使用已经存在的颜色组合的名字, 你就会在后来的使用中改变那个颜色组.

当你使用匹配功能时, 给定的模式字符串一直都会被标识, 直到有一个新的匹配操作或者执行下面这个命令:

:match NONE


这个匹配命令只能是一次匹配一个模式; 所以Vim已经为你提供了两个命令来同时匹配多达三个匹配. 这个命令非常简单地记住, 因为它们的名字和命令的内容很相似:

:2match
:3match


你可以考虑一下这个匹配命令是不是合适你, 因为它可能没什么用. 这里有几个例子, 来显示了匹配的功能.

例1:

在邮件中, 有一个通常的规则, 你不能一行中写超过74个字符(这是一个老的编程语言的规则, 如Fortran-77). 在这种情况下, 如果当你一行中写到最多个字符时, Vim能帮助提醒你, 是非常好的.

这个功能可以通过下面的命令来实现:

:match ErrorMsg /\%>73.\+/


这条命令中, 第73个字符后的字符都会被标识成一个错误的颜色. 这个匹配中的正则表达式, 我们把分解开:
\%>     :在它后面有个数字, 匹配这个数字的所在列后面的字符
73      :列的序号
v       :和刚刚的的命令组合, 这个意味着下部分非常神奇(magic). 参照 :help magic    可得到更多的信息
.\+     :匹配一个或多个字符


例2


当你在编码时, 有一个非常普通的规则, 就是制表符(tab)只被用作缩进代码, 不能用在别的地方. 然而, 因为某些原因, 可以很难去遵守这个规则. 现在, 通过一个非常简单的匹配命令, 就可以避免这个发生.
:match errorMsg /[^\t]\zs\t\+/


现在你就可以检查是否已经将这个规则给忘掉了, 在代码中使用了制表(符. 上面的模式字符串分解, 就是:
[^   :后面的字符将不被包含
\t   :制表符(tab)
]    :一组字符的结束
\zs  :将要匹配的字符(即[^\t]不含制表符的字符串)放在一行中第一个非空格的位置, 即一    行中, 从第一个不是空白的字符开始就不能有制表符了
\t\+ :一行中一个或多个制表符


这个命令是说: 不要去匹配所有的制表符, 只是去匹配不在行首出现的制表符(行首为忽略行前空白第一个字符)

如果你只想用空格符来缩进代码, 而不是制表符, 那你可以把命令改成:

:match errorMsg /[\t]/


这个命令是说: 匹配所有的制表符

例3:

如果你要在你的文本里写有很多的IP地址,有时候是很可能打在一个地址中打错一个值(如123.123.123.256). 为了帮你避免这种错误, 你可以把下面的这个命令语句加到你的vimrc文件中:

match errorMsg /\(2[5][6-9]\|2[6-9][0-9]\|[3-9][0-9][0-9]\)[.]
               \[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}\|
               \[0-9]\{1,3\}[.]\(2[5][6-9]\|2[6-9][0-9]\|\
                \\ \[3-9][0-9][0-9]\)[.][0-9]\{1,3\}[.][0-9]
                \\{1,3\}\|\[0-9]\{1,3\}[.][0-9]\{1,3\}[.]\(2[5]
                \\ \[6-9]\|\2[6-9][0-9]|[3-9][0-9][0-9]\)[.]
                   [0-9]\{1,3\}
                \\|[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.]
                \\(2[5][6-9]\|2[6-9][0-9]\|\[3-9][0-9][0-9]\)/


尽管这好像是为了解决一个小的错误而大费周折, 你应该知道就算它就帮了你一次, 那它也已经完善了它的价值.

如果你想只想配置一个IP地址, 你可以使用下面这个更简单的命令:

match todo /\(\(25[0-5]\|2[0-4][0-9]\|[01]\?[0-9]
             [0-9]\?\)\.\)
           \\ \{3\}\(25[0-5]\|2[0-4][0-9]\|[01]\?
             [0-9][0-9]\?\)/

你可能感兴趣的:(编程,正则表达式,vim,Gmail,fortran)