Vim 实用技巧必知必会
吴咏炜
前 Intel 资深软件架构师
21753 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 25 讲
Vim 实用技巧必知必会
15
15
1.0x
00:00/00:00
登录|注册

12|语法加亮和配色方案:颜即正义

Vim 的加亮效果可以输出成 HTML 文件,也可以复制到剪贴板中成为带语法加亮的富文本
主流终端可以显示 256 色,某些终端已经可以显示 RGB 真彩
语法项目可以与加亮组进行链接,加亮组可以针对终端和图形界面定义不同的显示方式
Vim 使用正则表达式匹配代码,将代码分到不同的语法项目里
查看 jellybeans 配色方案中的颜色定义,了解其解决不同终端下颜色一致性问题的方法
思考如何使颜色在 8/16 色终端和 256 色终端下都有效,并在 256 色终端下使用 256 色的配置
修改插件使其可以在 macOS、Linux 和 Windows 上复制带语法加亮的代码到剪贴板
使用 :TOhtml 命令将语法加亮效果输出为 HTML 文件
检查/调试配色方案工具:SyntaxAttr.vim
推荐的配色方案:gruvbox, jellybeans, desertEx
背景设置和默认的加亮组展示方式
配色方案包含模板语句和色彩定义
语法匹配和默认的语法加亮链接组
通过例子解释了 Vim 里如何实现语法加亮
Vim 的语法加亮依靠 syntax 目录下的运行支持文件
文章总结
课后练习
输出加亮效果
配色方案
语法加亮
Vim 的语法加亮和配色方案

该思维导图由 AI 生成,仅供参考

你好,我是吴咏炜。
语法加亮这个功能,我们都非常熟悉。和 vi 刚出现的时代不同,它现在已经成为编程的基本功能了。在我们使用的各种代码编辑器中,都有语法加亮的功能。我们甚至可以拿一句俗语反过来说:没见过猪跑,还能没吃过猪肉么?
但是,你有没有想过,语法加亮到底是怎么实现的呢?今天,我们就不仅要尝尝不同“风味”的猪肉,还要进一步看看猪到底是怎么跑的——这样,我们才能选择,然后调整出,最符合自己口味的大菜。

语法加亮

第 8 讲里,我们已经提到,Vim 的语法加亮依靠的是在 syntax 目录下的运行支持文件。今天,我就通过例子给你解说一下,Vim 里如何实现语法加亮,然后语法加亮又如何映射到屏幕上的颜色和字体。
我们先来看一个比较简单的例子,xxd。
xxd 这个名字看起来,是不是有点陌生又有点熟悉?其实,我们在第 11 讲还刚讲过 xxd:它是一个把二进制文件转换成地址加十六进制数值再加可读 ASCII 文本的工具,它的输出格式在 Vim 里也被称作 xxd。不过,在用菜单项或 :%!xxd 命令转换之后,Vim 并不会自动使用 xxd 格式。要应用 xxd 格式的语法加亮,我们需要使用自动命令(可以参考 :help using-xxd),或者手工使用命令 :setf xxd。下图是对上次的二进制文件使用了 xxd 语法加亮的效果:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Vim中的语法加亮和配色方案对程序员至关重要。本文深入探讨了Vim中语法加亮的实现原理和配色方案的设置。首先,文章介绍了Vim中语法加亮的实现原理,通过具体例子分析了语法文件的内容和语法匹配的定义。其次,详细解释了配色方案的设置,包括背景色的设定和不同加亮组的颜色定义。读者可以了解如何根据个人喜好定制Vim的配色方案。推荐了gruvbox、jellybeans和desertEx三个配色方案,并介绍了SyntaxAttr.vim工具用于调试语法文件或配色方案。此外,还介绍了Vim的加亮效果可以输出成HTML文件,也可以复制到剪贴板中成为带语法加亮的富文本。整体而言,本文通过深入浅出的方式,帮助读者了解了Vim中语法加亮和配色方案的重要性和实现原理。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Vim 实用技巧必知必会》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • 我来也
    今天收获最大的就是这个`termguicolors`参数了. 有了它,vim的显示效果立马提升了好几个档次.������ 最近也折腾过256色,但总感觉配置的颜色跟实际显示的有些偏差. 对于在tmux中使用vim的同学来说,这篇文章可能会有帮助. [How to use true colors in vim under tmux?](https://github.com/tmux/tmux/issues/1246)

    作者回复: 一直坐沙发……:-)

    2020-08-21
    2
    5
  • Geek_fd61d6
    老师您好,请问为何在 wsl2 ubuntu22 环境下,$COLORTERM 终端下为空,此时设定 termguicolor 是否失败。

    作者回复: COLORTERM 是根据你的终端是否支持真彩你自己手工设的。你可以先设置之后检查一下颜色是不是正常,如果正常就加到你的 .profile 之类的配置文件里去。

    2024-03-18归属地:上海
  • YouCompleteMe
    老师,vim-copy-as-rtf在不支持的平台上会 echomsg 'Cannot load copy-as-rtf plugin: unsupported platform',比如我使用的WSL。我在多个平台共用的一份vimrc,如果在vimrc里判断平台,会增加很多代码。可不可以增加一个option,在不支持的平台,直接finish。

    作者回复: OK,你现在可以设: let g:copy_as_rtf_silence_on_errors = 1

    2020-09-09
  • pyhhou
    老师给的这 3 个配色方案是直接用插件下载安装后就可以生效吗?我试了一下,下载了第 3 个插件(mbbill/desertEx)下来,Mac 下的图形界面的配色还是没有改变。试着在配置文件里加了 set bg=dark 还有 syntax on,但是不起作用。 用 vim-scripts/SyntaxAttr.vim 插件查看 .vimrc 文件中的关键字,输出是 group: vimCommand->Statement guifg=#ffff60(#ffff60) gui=bold 主要是 Mac 图形界面的关键字是深紫色,高亮和不高亮区别不是特别明显。还是想弄个清晰一点的配色,望老师指点������

    作者回复: 在你的 vimrc 中用 colorscheme 命令选择配色方案了吗?可以先直接在 Vim 里手敲命令试验效果,用“colorscheme desertEx”、“colorscheme gruvbox”这样的命令。

    2020-08-28
    2
  • AirY
    大佬,求帮助,我配置Vundle插件后,sudo vim会报错

    作者回复: 建议你先去查阅一下,怎样问问题…… 我完全不知道你的问题出在哪里,怎么回答你?我只能说的,我的 sudo vim 是没问题的。 但我一般也不这么用,因为容易出权限问题。如果我需要用 root 权限编辑的话,我更愿意先 sudo su -l,再进行编辑。

    2020-08-24
    2
  • 我来也
    课后思考题: 与想象的差不多,根据当前环境来调整配色的参数. [jellybeans](https://github.com/nanotech/jellybeans.vim/blob/master/colors/jellybeans.vim) 中的代码如下: ``` if s:true_color || &t_Co >= 88  let s:low_color = 0 else  let s:low_color = 1 endif " sets the highlighting for the given group fun! s:X(group, fg, bg, attr, lcfg, lcbg)  if s:low_color   let l:cmd = "hi ".a:group.   \ " ctermfg=".s:prefix_highlight_value_with("", a:lcfg).   \ " ctermbg=".s:prefix_highlight_value_with("", a:lcbg)  else   let l:cmd = "hi ".a:group.   \ " guifg=".s:prefix_highlight_value_with("#", a:fg).   \ " guibg=".s:prefix_highlight_value_with("#", a:bg)   if !s:true_color    let l:cmd = l:cmd.    \ " ctermfg=".s:rgb(a:fg).    \ " ctermbg=".s:rgb(a:bg)   endif  endif  ... endfun ```
    2020-08-21
    2
  • 瀚海星尘
    如果之前的课程是“酷”话,这节课后就开始“炫”了😄。终端的色彩实现方案,感觉很有意思啊~
    2020-09-26
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部