VIM:如何在不使用非文本颜色元素的情况下更改 Showbreak Highlight 颜色

Posted

技术标签:

【中文标题】VIM:如何在不使用非文本颜色元素的情况下更改 Showbreak Highlight 颜色【英文标题】:VIM: How to change the Showbreak Highlight color without using the NonText Color-element 【发布时间】:2011-08-10 10:54:29 【问题描述】:

我注意到'showbreak' 符号用突出显示的“NonText”颜色元素突出显示。非文本也用于 EOL 字符。 我想保留 EOL 字符的突出显示颜色,但想更改它的显示中断符号,这可能吗?

另一个问题是我的showbreak符号没有显示。 我想使用这个符号“↳”并将其放在行号列中(使用 set cpoptions+=n)。我不知道如何显示符号以及如何在 showbreak 符号后放置一个空格(在文本和符号之间)。

谁能帮帮我?

【问题讨论】:

这里有同样的问题,尽管这是一个老问题。对我来说,使用 cpoptions+=nshowbreak 与行号的颜色不同,这很烦人:ell.io/k5A7 【参考方案1】:

我不认为你会得到与 EOL 字符不同的突出显示,至少我不知道有什么方法可以做到这一点。

对于第二部分,我可以提供帮助。通过以下设置,我能够让“↳”显示在我的行号列中:

let &showbreak = '↳ '
set wrap
set cpo=n

请注意, 后面有一个空格。在文件中有 > 9 行之前,这会很好地排列。如果您希望它与数字列的最后一个字符对齐,而不管行数如何,我不确定您将要做什么。

编辑:我最近在 IRC 上为某人写了一个proof-of-concept function,它突出显示了一行中的第一个字符,该行已被不同的突出显示组包裹。它没有经过太多测试,但它似乎工作。不完全是您要找的东西,但也许值得一看。

【讨论】:

谢谢兰迪。当我在命令行中插入第一行时,我看到:set showbreak=?\ 你能在vim中输入其他多字节字符吗? vim --version 的输出是否有“+multi_byte”? 我只包含以下功能:+multi_byte_ime/dyn +multi_lang。我的编码是latin1。当我将其更改为 utf-8 时,我可以在 showbreak 符号上方插入,但我无法在 utf-8 中打印出来。 Utf-8 在许多(欧洲)语言中带来了很多问题。你知道是否有另一种方法可以在不将编码更改为utf-8的情况下将+多字节添加到vim? 不幸的是,我对 vim 中的编码知之甚少。我只建议+multi_byte 的东西,因为我必须输入 字符(u21b3)。 我也不知道。我已经阅读了帮助文件,但仍然不知道该怎么做。我想我的问题没有解决方案。【参考方案2】:

:help hl-NonText 非常清楚,'showbreak' 字符串和其他非文本字符串不能有不同的颜色,eol 是其中的成员(请参阅:help 'listchars'):

非文本

'~' 和 '@' 在窗口的末尾,字符来自 'showbreak' 和 文本中不存在的其他字符(例如,“>” 当双宽字符不适合放在末尾时显示 行)。

如果您愿意接受此限制 (@elliottcable),hi! link NonText LineNr 会将 'showbreak' 字符串与行号颜色匹配。

如果您真的想变得更聪明,作为一种折衷方案,您可以创建一个映射或命令在 ':set list'':set nolist' 之间切换,这也会同时调整 NonText highlight 设置。

如果您使用 :set relativenumber(在 vim 7.3 中添加),:set showbreak=↳\ \ \ 将可靠地保持您的 'showbreak' 整齐排列,因为在您浏览文件时数字宽度不会改变。 (除了他的回答中提到的:set cpo+=n:set wrap @Randy Morris。)

字符肯定需要 UTF-8,因为它不会出现在其他编码中。我强烈建议您仔细记录您的编码问题,详细说明如何重现它们以及您的操作系统、其版本和 vim 的:version 输出,并将它们作为单独的问题发布。 UTF-8 应该帮助您解决多种语言问题,而不是成为障碍。

【讨论】:

(派对迟到)我想知道是否可以将 unicode 字符用于 showbreak,例如来自 nerd 字体的 \uf443。是的,有可能吗?

以上是关于VIM:如何在不使用非文本颜色元素的情况下更改 Showbreak Highlight 颜色的主要内容,如果未能解决你的问题,请参考以下文章

在不重新加载 web 视图的情况下更改 html 文本颜色

如何在不选择 RichTextBox 的情况下恢复插入符号位置或更改文本颜色

如何在不更改子元素的情况下更改元素的文本?

在不更改边框颜色的情况下更改 GridView 单元格中的文本颜色

如何在不更改子元素的情况下更改元素 innerText

PyQt 在不重置样式的情况下更改 QPushButton 背景颜色