vim - Vim 终端删除线

标签 vim configuration neovim text-rendering

我正在尝试在终端 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 数据库中的 smxxrmxx(标准)和 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/

相关文章:

c# - CS 的 MacVIM 语法文件

configuration - Cassandra Commit 日志理想大小和默认大小说明

Git - 如何将目录中的更改自动推送到另一个分支

Tomcat 内存不足堆转储设置

Vim (vim + nvim) 多次源文件

regex - 删除标签之外的文本

vim - 这些功能在 Macvim 中是否可行?

vim - 如何在 vim 中通过空行折叠(rspec 示例)?

neovim - 忽略指定的子目录 vim 望远镜

Vim:如何在分割窗口中跳转到定义