当前位置: 首页 > Linux

Vim技巧:设置空格和制表符可见,自定义显示的字符颜色

时间:2023-04-06 02:27:32 Linux

在Windows下使用某些IDE(如SourceInsight)查看代码时,可以设置空格和制表符可见.本文介绍如何在vim中进行此项设置,并自定义显示的字符颜色。具体包括以下内容:设置空格和制表符可见的好处在工作中,设置空格和制表符可见主要是基于以下需求:由于制表符在不同的编辑器下显示宽度可能不同,使用制表符代码中缩进的字符,以及在其他地方查看时的排版缩进都会发生变化。某些公司的编程规范要求不能使用制表符。设置制表符可见,可以找到使用制表符的地方,也很容易删除。有些公司使用git来管理代码并上传到gerrit服务器。如果上传的代码中包含tab字符,在gerrit上查看代码会把tab字符显示为红色,不建议使用tab字符,所以需要设置tab字符可见,方便查找删除上传代码之前的制表符。在git上使用gitlog-p命令查看修改前后的代码时,对于行尾的空格会显示红色警告。为了不看到这个警告,需要将空格设置为可见,找到行尾的空格,以便及时删除。设置空格和制表符可见在vim中,可以使用以下命令设置空格和制表符可见::setlocallist:setlistchars=tab:>~,trail:。执行:setlocallist命令后,tab字符会显示为CTRL-I键的显示字符实际显示为^I。还在行尾显示一个$字符。默认不显示空格。这个列表选项是一个“localtowindow”选项,即可以用:setlocal命令设置它只在当前窗口生效。这样设置后,使用:edit命令打开其他文件。在新窗口中未启用此设置,而不影响其他文件。如果只想在打开代码文件时显示空格或制表符,而打开其他类型的文件,如txt文件、markdown文件、makefile等,不显示空格或制表符,可以使用:setlocallist命令.如果您需要将其设置为全局状态并为所有窗口启用此设置,您可以使用:setlist命令。由于将制表符显示为^I不直观,不想显示行尾的$字符,需要显示空格,所以执行setlistchars=tab:>~,trail:。命令设置制表符和空格的显示样式,行尾字符不显示。listchars选项是一个“全局”选项。设置后对所有窗口生效。它用于设置列表属性将显示哪些字符以及如何显示它们。常用选项值说明如下:eol:c设置行尾显示的字符为c。这里的c可以替换成任意字符,比如默认的$字符,或者改为#字符等,显然需要设置为可见字符才能清楚的看到显示效果。如果未设置此项,则行尾不显示任何字符。tab:xy设置制表符的显示样式,字符x将始终显示,显示零个或多个字符y以填充制表符的显示宽度。例如设置为tab:>-,tab字符的显示宽度为4,则tab字符将显示为>---。实际显示的时候,可能只显示一个>,或者只显示>-。这与制表符的位置有关。假设制表符的显示宽度为4,表示制表符的宽度总是停在4的倍数,当手动输入3个空格再输入一个制表符时,制表符只会显示一个空白字符,然后只显示设置的字符x。对于刚才的例子,只显示>字符。在实际测试中,如果设置了:setexpandtab,tab符会被转换成空格,tab键不会通过敲tab键得到。您必须先执行:setnoexpandtab命令关闭此设置,然后再进行测试。tab:xyz设置tab字符的显示样式,字符z会一直显示,字符z显示后,如果还有可显示的位置,字符x会显示在最前面,零个或多个字符在字符x和字符z之间显示字符y以填充到制表符的显示宽度。例如设置为tab:<->,制表符显示为4,则制表符将显示为<-->。实际显示时,可能只显示一个>,也可能显示为<>、<->等,具体取决于制表符的位置。如上所述。如果不设置tab:,tab字符默认显示为^I。space:c设置所有空格显示为字符c,包括行首空格、行中空格和行尾空格。这里c可以替换为任何字符。如果不设置此项,空格默认显示为空白。trail:c设置行尾空格显示为字符c,会覆盖space:的设置,只覆盖行尾空格的显示。这里c可以替换为任何字符。如果不设置此项,则行尾的空格保留为space:项的设置。不同的设置项之间用逗号,隔开。例如,tab:>~,trail:。设置制表符和尾随空格的显示样式。根据上面的描述,我们可以知道setlistchars=tab:>~,trail:。命令设置制表符显示为>~~~~(假设制表符的显示宽度为4),并设置行尾的空格显示为点号,不显示空格行首和行中间有空格,行尾不显示字符。如果需要显示所有空格,可以将trail改为空格。设置空格和制表符的显示颜色。执行前面的设置后,空格和tab字符已经可见,但是显示的字符颜色使用hiSpecialKey的颜色。您可以执行:hi命令查看SpecialKey对应的颜色。与vim使用的颜色主题有关。不同的颜色主题可能会有不同的颜色,比如蓝、绿、黑底白等,这种显示颜色会和代码文件本身的颜色高亮混合在一起,不方便区分。假设制表符显示为>~~~~,字符颜色为蓝色,如果后面跟着蓝色代码关键字,会和代码关键字整体显示,不方便看代码关键字。行尾的空格显示为一个点。如果注释末尾有空格,很容易将其误认为是注释本身的点。为了方便和代码文件本身的颜色高亮区分开来,可以使用下面的命令,将可见的空格和制表符设置为灰色显示,不那么显眼,容易和代码文件的颜色高亮区分开来代码文件本身::hiSpecialKeyguifg=darkgreyctermfg=darkgrey如果不想显示成灰色,可以修改上面guifg和ctermfg的值,设置成自己喜欢的颜色。这样设置后会出现一个问题,就是修改了默认的hiSpecialKey项的颜色。而vim会用这种颜色来显示它自己的一些内容。例如,执行:map命令显示映射的快捷键时,按键字符将显示为hiSpecialKey的颜色。改成灰色后就不是很显眼了。为了避免直接修改hiSpecialKey的颜色,我们可以自定义一个颜色组,设置只对空格和制表符生效,如下::highlightMyTabSpaceguifg=darkgreyctermfg=darkgrey:matchMyTabSpace/\t\|/这里使用:highlight命令(该命令也可以简称为:hi命令)定义一个MyTabSpace颜色组,显示为灰色。然后使用:match命令设置MyTabSpace颜色组以对空格和制表符生效。上面的\t是制表符。使用|分隔不同的字符串,并使用\|写的时候转义。|之后的空白字符是空格。自动启用空格和制表符只对特定类型的文件可见前面已经解释过,我们可能只设置空格和制表符在查看代码文件时可见,最好自动启用。这需要在~/.vimrc文件中配置。完整的配置如下:“新建一个MyTabSpace组,并设置其颜色高亮MyTabSpaceguifg=darkgreyctermfg=darkgrey”指定制表符和空格的颜色组为MyTabSpace,不同的字符串用|分隔,使用\|转义。匹配MyTabSpace/\t\|/"针对特定类型的代码文件,设置查看代码时注意的tab键和行尾空格autocmdFileTypec,cpp,java,xmlsetlocallist|setlistchars=tab:>~,trail:.本配置首先使用:highlight命令(在.vimrc文件中写入时,省略前面的冒号)自定义一个MyTabSpace颜色组,颜色为灰色。然后使用:match命令设置MyTabSpace颜色组对空格有效和tab字符。由于空格和tab字符默认是不可见的,所以这个设置对没有设置空格和tab字符可见的文件窗口没有影响。后面使用:autocmd命令用于c,cpp,java,xml这几种文件自动设置空格和制表符可见,可以看到这些字符显示为灰色。其他类型的文件没有自动设置,不会受到影响。如果需要,您可以添加其他类型的文件扩展名。您可以使用:help'list'命令查看列表选项的说明。您可以使用:help'listchars'命令查看listchars选项的说明。您可以使用:help:highlight命令查看更多关于设置颜色高亮的说明。可以使用:help:match命令查看如何为指定字符串设置显示颜色组。可以使用:help:autocmd命令查看如何对特定类型的文件自动执行指定命令。