终端 Vim 删除线

Posted

技术标签:

【中文标题】终端 Vim 删除线【英文标题】:terminal Vim strikethrough 【发布时间】:2020-05-14 08:13:57 【问题描述】:

我正在尝试在终端 vim 中为 markdown 文件呈现删除线。但是,使用当前的插件和配色方案,它要么为文本着色,要么为文本加下划线。我很挑剔,我想要删除线的渲染。

在 Markdown 文件中运行 :so $VIMRUNTIME/syntax/hitest.vim 会正确显示包括下划线/着色在内的高光,以及 groupnamehtmlStrike

所以我尝试将以下内容添加到我的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 数据库中的smxxrmxx(标准)和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 删除线的主要内容,如果未能解决你的问题,请参考以下文章

Linux终端和vim快捷键介绍

Linux终端Shell下的常用快捷键收集

Mac 终端 Vim 只会在行尾使用退格

Ubuntu终端vim xx.py进入只读界面

如何复制vim编辑器中的内容粘贴到另一个终端的编辑器里

如何复制vim编辑器中的内容粘贴到另一个终端的编辑器里