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+=n
时 showbreak
与行号的颜色不同,这很烦人: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
的东西,因为我必须输入↳
字符(: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 颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何在不选择 RichTextBox 的情况下恢复插入符号位置或更改文本颜色