VIM中的仅显示字符替换

3
有没有办法设置VIM,使其在不更改底层文件的情况下替换显示文本中的字符?
具体而言,我想将SOH字符(默认情况下显示为^A)替换为制表符,以使FIX协议日志文件更易读。
我部分地接受解决方法。
:highlight SpecialKey guifg=#ffffff

为什么^A在白色背景下不可见,而制表符的替换会更好。

更新:

我几乎找到了解决方案:

:syntax match SOH /^A/ conceal cchar=_
:set conceallevel=2
:hi conceal guibg=NONE

很遗憾,我还没有找到如何将制表符转义为cchar参数(而不是下划线)的方法。


:set list 怎么样? - mouviciel
1
根据文档:字符不能是控制字符,例如Tab。请参见:h syn-cchar - dNitro
@mouviciel 我看不出 :set list 怎么有用。请提供一个例子。 - Jan Červák
输入命令 :set list,即可激活列表模式,它将会显示不可打印的字符。在此模式下,你可以隐藏有限数量的字符,包括:tab,eol,空格,trail等(:h listchars)。不幸的是,SOH字符不是其中之一。实际上,:set list:set listchars=eol:<相互关联,就像在这里使用 ^A 时所做的那样 ;) - dNitro
1个回答

0

我在打开日志文件时遇到了问题。

我使用自动命令进行替换并离开未保存的文件。

 :au BufEnter *.log :%s/^M/\r/g

这个自动命令将在打开日志文件时用换行符替换所有的^M字符。

因此,像ADM-DEVICE : logged in^MADM-DEVICE : in prompt这样的文本将正确显示为

ADM-DEVICE : logged in ADM-DEVICE : in prompt

同样,其他控制字符也可以被替换。我会将'^['更改为`以便更好地理解。

不应手动编辑和保存日志文件。因此,我将使用另一个自动命令。

  :au BufWrite *.log :q!

如果我尝试保存文件,这个自动命令将退出文件。自动命令将是自动执行您想要执行的操作的最佳选择。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接