高亮细节 highight

回忆

  • 这个自动命令 autocmd 还是很方便的
  • 打开时、保存时就会有自动执行的操作
  • 自动命令有这么几大元素

    • {event} 触发事件
    • {pattern} 文件模式
    • {cmd} 具体执行命令
    • {augroup} 命令组
  • 自动命令可以新建、删除、列表、查询
  • 还可以强制执行
  • 有这个我们可以

    • 针对每种不同的文件的类型
    • 定义相应的触发事件
    • 然后执行各种各样的命令
    • 方便操作
  • 不过关于文件类型的高亮显示还是没有讲的特别清楚

    • 为什么publicjava文件里面就可以改变颜色呢??

颜色方案

git clone http://gitee.com/overmind1980/oeasyvim.git
cd oeasyvim
vi oeasy.java

  • 字符串是棕色的
  • publicvoid是绿色的
  • :colorscheme murphy

  • 我们发现在murphy颜色方案下
  • 字符串不变色了
  • publicvoid也不变色了

查看配色

  • :hi

  • 查看不到为什么public没有改变颜色

语法文件syntax

  • 我要找到关于java语法定义Syntax的文件java.vim
  • 于是我搜索一下
  • sudo find / -name java.vim

  • 这三个java.vim都位于系统的配置文件夹中

    • ftplugin 对应java的系统插件

      • ft 是 filetype
      • plugin 是 插件
      • /usr/share/vim/vim81/ftplugin/ 对应系统的插件
      • ~/.vim/ftplugin 对于用户的插件
    • indent 对应java的系统缩进
    • syntax 对应java的系统语法
  • ls /usr/share/vim/vim81/syntax/java.vim

  • vi /usr/share/vim/vim81/syntax/java.vim

查找String

  • /String

    • 找到41个匹配
  • /\<String\>

    • 找到3个匹配

正在上传…重新上传取消

  • 大概率String本身就是那个高亮元素
  • :q 退回到oeasy.java

设置高亮

  • :colorscheme murphy
  • :hi String ctermfg=brown

    • hi 是highlight
    • String是需要定义颜色的组名称
    • cterm是color terminal foreground
    • brown 是棕色

  • String的高亮设置成功
  • 我们来分析一下什么是String

String的定义

  • :e /usr/share/vim/vim81/syntax/java.vim
  • /\<String\>

  • /javaString
  • /\<javaString\>
  • :set wrap

  • 大致是定义了一个region区域javaString
  • 然后和让javaString连接到了String上
  • 在syntax/java.vim定义了各种区域region

    • 有些是关键字keywords
    • 有些是字符串String
  • 不过具体给这些定义好的区域上什么颜色
  • 还是得配色文件来完成

    • 比如murphy.vim
  • murphy.vim目前没有定义String这个区域的颜色
  • 但是我们在最后强行hi String ctermfg=brown
  • 难道murphy.vim就真没有String区域的颜色定义么?

murphy.vim

  • sudo find / -name murphy.vim
  • vi /usr/share/vim/vim81/colors/murphy.vim
  • /String

  • sudo vi /usr/share/vim/vim81/colors/murphy.vim
  • 在最末一行加上一句

  • 保存murphy.vim并退出
  • vi oeasy.java 再切换到murphy配色
  • 设置成功
  • 我们再来看看 public 等关键字

找到public

  • vi /usr/share/vim/vim81/syntax/java.vim
  • /public

  • public、protected这些关键字都已经被定义到了一个javaScopeDecl里面
  • 鼠标放到 javaScopeDecl 上 按下*

  • 我们可以发现javaScopeDecl被定义为javaStorageClass
  • javaStorageClass被定义为StorageClass

尝试修改

  • 回到oeasy.java
  • :hi StorageClass=cyan

  • 修改成功
  • sudo vi /usr/share/vim/vim81/colors/murphy.vim
  • 在最后添加 :hi StorageClass=cyan
  • 然后再打开oeasy.java
  • 试验成功!!!

总结

  • 我们这次研究了一下配色方案

    • murphy虽然配色好看
    • 但是对于java的支持并不好
    • 我们对于murphy进行了修改
    • 增加了StringStorageClass颜色的定义
    • 整体思路是在syntax中定义组
    • 然后在配色方案中对于组进行颜色设置
  • 可是syntax中如何定义组的呢?
  • 下次再说!

oeasy教您玩转vim - 89 - # 高亮细节Highlight的更多相关文章

  1. oeasy教您玩转vim - 56 - # 字符可视化模式

    ​ 可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...

  2. oeasy教您玩转vim - 57 - # 行可视化

    ​ 可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...

  3. oeasy教您玩转vim - 53 - # 批量替换

    查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...

  4. oeasy教您玩转linux010203显示logo

    我们来回顾一下 上一部分我们都讲了什么?

  5. oeasy 教您玩转linux010101查看内核uname

    linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...

  6. oeasy教您玩转linux010202软件包管理apt

    顾一下 上一部分我们都讲了什么?

  7. oeasy教您玩转linux010201持续输出yes

    我们来回顾一下 上一部分我们都讲了什么?

  8. oeasy教您玩转linux010108到底哪个which

    到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?

  9. oeasy教您玩转python - 006 - # hello world

    ​ Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...

  10. oeasy教您玩转linux-010110内容回顾

    我们来回顾一下 我们都讲了什么?

随机推荐

  1. go高并发之路——启航

    工作7年有余了,B端和C端业务都做过不少,打算整理分享一些自己在实际工作中所遇到的高并发的场景和解决方案,也是对自己本人职业生涯中的一些经验的总结和感悟.与其他博文略有不同的是,这些基本上都是自己实际 ...

  2. N 年前,为了学习分库分表,我把 Cobar 源码抄了一遍

    10 几年前,互联网产业蓬勃发展,相比传统 IT 企业,互联网应用每天会产生海量的数据. 如何存储和分析这些数据成为了当时技术圈的痛点,彼时,分库分表解决方案应运而生. 当时最流行的 Java 技术论 ...

  3. linux wget命令的重要用法:下载文件并保存,后台下载

    Linux wget命令是一个下载文件的工具,它用在命令行下. #从网络下载一个文件并保存在当前目录 [root@node5 ~]# wget http://cn.wordpress.org/word ...

  4. 大数据之Hadoop中HDFS的故障排除

    NameNode故障处理 1)需求 NameNode进程挂了并且存储的数据也丢失了 2)故障模拟 (1)kill -9 NameNode进程 kill -9 19886 (2)删除NameNode储存 ...

  5. Winform 动态画曲线 波峰波谷识别

    项目需要识别数组的波峰波谷,我就想 可视化的测试自己的判断波峰波谷的算法,于是就有了下面这张图. 我就用gdi+再panel上描点,点画完后,就点击分析按钮蓝色的为波峰 绿色的为波谷.虽然说能识别出来 ...

  6. nginx重载流程nginx请求处理流程nginx单进程和多进程

    nginx重载流程 首先nginx会向master进程发送HUP信号[reload命令] master进程校验配置语法是否正确 master进程打开新的监听端口 master进程用心配置启动新的wor ...

  7. 「C++」论高精度

    大家好,我是Charzie.在编程领域,高精度计算是一个常见的问题.当标准的整型或浮点型无法满足我们的计算需求时,高精度计算就显得尤为重要.在C++中,虽然标准库没有直接提供高精度数据类型,但我们可以 ...

  8. NumPy 通用函数(ufunc):高性能数组运算的利器

    NumPy 通用函数(ufunc) 简介 NumPy 通用函数(ufunc),代表"通用函数",是一类用于对 ndarray 对象进行逐元素运算的高性能函数.ufunc 使 Num ...

  9. 面试必会 --> MyBatis篇

    什么是MyBatis Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂的过程 ...

  10. spring与设计模式之二单例模式

    网络上都说ApplicationContext是单例,但看了原始代码,我认为应该是一个错误的表达. 我们来看Spring6.x中用springboot创建一个程序的时候默认的applicationCo ...