【问题标题】:terminal Vim strikethrough终端 Vim 删除线
【发布时间】: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

标签: vim configuration neovim text-rendering


【解决方案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 帮助主题之外,我没有对此进行调查。

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 2016-01-27
    • 2021-12-09
    • 2013-08-20
    • 2011-09-01
    • 2010-10-28
    • 1970-01-01
    • 2013-07-04
    • 2015-12-23
    相关资源
    最近更新 更多