我正在尝试在终端 vim 中为 markdown 文件渲染删除线。但是,使用当前的插件和颜色方案,它可以为文本着色或为其添加下划线。我很挑剔,我想要删除线的渲染。
在 markdown 文件中运行 :so $VIMRUNTIME/syntax/hitest.vim
可以正确显示突出显示,包括下划线/颜色,还有 groupname
,即 htmlStrike
.
因此,我尝试将以下内容添加到我的 init.vim
中(已阅读 :h attr-list
):
function s:ApplyStrikethrough()
highlight htmlStrike cterm=strikethrough
endfunction
autocmd FileType md call s:ApplyStrikethrough()
我也在没有 autocmd 的情况下尝试了上述方法,例如只需突出显示 htmlStrike cterm=strikethrough
。我还尝试过 highlight htmlStrike gui=strikethrough guisp='Red'
。我能做到的就是一点亮点都没有……
我知道我的终端(Kitty)能够渲染删除线,运行echo -e "\e[9mstrikethrough\e[0m"
。
OS: Manjaro Linux x86_64
WM: i3
shell: zsh 5.7.1
Vim: NVIM v0.4.3
Term: kitty 0.15.1
非常感谢任何帮助,谢谢!
最佳答案
我刚刚遇到了同样的问题,经过一段时间的研究,找到了正常vim的解决方案。
我已将以下内容放入我的 .vimrc
if &term =~ 'xterm\|kitty\|alacritty\|tmux'
let &t_Ts = "\e[9m" " Strikethrough
let &t_Te = "\e[29m"
let &t_Cs = "\e[4:3m" " Undercurl
let &t_Ce = "\e[4:0m"
endif
这将为 xterm、kitty、alacritty 和 tmux 终端启用删除线和下 curl (由 TERM 环境变量标识)。理想情况下,if 测试可能应该依赖于 terminfo 数据库中的 smxx
、rmxx
(标准)和 So
(kitty 扩展)功能,但是我不知道如何从 vim 脚本查询它。
这可以通过例如格式化状态行或使用问题中的突出显示组 htmlStrike
进行测试。
:hi StatusLine cterm=strikethrough`.
:help undercurl
中提到了 undercurl 的技巧。 :helpterminal-output-codes
列出了 vim 知道的终端代码,其中还显示了删除线。请注意,删除线的转义码在 ECMA-48 中定义。 (称为“Crossed-out”),而 undercurl 是由 Kitty 在其 protocol extensions 中定义的。 .
关于 neovim 的简短说明:对我来说,neovim 中的删除线是开箱即用的,但下 curl 又恢复到正常的下划线。除了注意到 neovim 没有 terminal-output-codes
帮助主题之外,我没有对此进行调查。
关于vim - Vim 终端删除线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59956790/