终端 Vim 删除线
Posted
技术标签:
【中文标题】终端 Vim 删除线【英文标题】:terminal Vim strikethrough 【发布时间】:2020-05-14 08:13:57 【问题描述】:我正在尝试在终端 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()
我也试过上面没有自动命令,例如只是highlight 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
非常感谢任何帮助,谢谢!
【问题讨论】:
您使用的是什么终端类型?在 shell 中,输入echo $TERM
。
@bk2204 在正确的路径上,您可能需要为您的 terminfo 设置一些属性
感谢您的宝贵时间!它返回xterm-kitty
。
【参考方案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 终端(由TERM
环境变量标识)启用删除线和undercurl。理想情况下,if-test 可能应该依赖 terminfo 数据库中的smxx
、rmxx
(标准)和So
(kitty 扩展)功能,但我不知道如何从 vim 脚本中查询它。
这可以通过例如格式化状态行或使用问题中的突出显示组htmlStrike
来测试。
:hi StatusLine cterm=strikethrough`.
在:help undercurl
中提到了undercurl 的技巧。 :help terminal-output-codes
列出了 vim 知道的终端代码,其中还显示了删除线。请注意,删除线的转义码在 ECMA-48 中定义(称为“Crossed-out”),而底卷线由 Kitty 在其 protocol extensions 中定义。
关于 neovim 的简短说明:对我来说,删除线在使用 neovim 时是开箱即用的,但 undercurl 又回到了正常的下划线。除了注意到 neovim 没有 terminal-output-codes
帮助主题之外,我没有对此进行调查。
【讨论】:
以上是关于终端 Vim 删除线的主要内容,如果未能解决你的问题,请参考以下文章