文件类型

回忆上节课内容

  • 上次了解了缩进的各种方式

    • 正常模式下用 << 缩进
    • 插入模式下用 tab 缩进
    • 显示缩进情况 :set listchars=eol:$,tab:>-,space:_
  • 有关于缩进对应空格数的参数

    • expandtab
    • shiftwidth
    • tabstop
    • softtabstop
    • autoindent
  • 简写为 :set noet sw=4 ts=4 sts=4 ai
  • 不同的文件类型可以对应不同的缩进长度吗??

检测文件类型

  • 首先需要检测文件类型
  • :filetype 可以设置当前文件类型检测信息

    • :filetype on 检测文件扩展名
    • :filetype off 取消检测文件扩展名
  • 如果是.c

    • 并且:filetype on
    • 就可以检测文件类型为 .c
    • 那我怎么知道 filetype 是什么呢?
  • :set filetype?

    • 结果是 filetype=c
  • 但是如何单独设置 .c 文件缩进为 8 呢?

文件类型缩进设置

  • 我们书写一个 demo.c
  • 可以发现这个文件 tab 是对应着 4 个空格的

  • 如果想单独设置 .c 文件类型的缩进的话

    • 需要打开文件类型缩进的开关
    • :filetype indent on

找到缩进配置文件

  • 系统的配置文件的位置在 /usr/share/vim/vim81/indent/

    • c 对应 c.vim
    • java 对应 java.vim
    • html 对应 html.vim
    • 不同的文件类型可以设置不同的缩进

      • c 缩进为 8
      • java 缩进为 4
      • html 缩进为 2
    • 找到了 /usr/share/vim/vim81/indent/c.vim 就可以设置c的缩进
  • 在最后加上

    • :set et sw=8 ts=8 sts=8 ai
  • 然后退出并重新打开 demo.c
  • 再g g = G
  • 就可以按照新设置的 /usr/share/vim/vim81/indent/c.vim来重新控制缩进了

更改文件类型

  • 我们打开 demo.c 时,系统会检测他的文件类型
  • 但是如果我们非要 要说他是一个 java 文件会如何呢?
  • :set filetype=java
  • 文件对于 include 之类的语法高亮消失了
  • g g = G
  • 让文件缩进的数量变回了 4

    • 按照java文件缩进的要求来做
  • 高亮可以根据文件类型而不同么?

文件类型语法高亮

#找出所有的java.vim文件
sudo find / -name "java.vim"  
  • 找出所有和 java 有关的文件

  • indent 下的 java.vim 负责缩进
  • syntax 下的 java.vim 负责语法高亮
  • 语法高亮的设置在

    • /usr/share/vim/vim81/syntax/下面

  • :syntax on 可以设置关键词高亮,这个是所有语法高亮的根开关

文件类型的插件

  • 除此之外,也可以加载 java 文件类型的的插件 plugin

    • 文件类型插件可以设置一键编译运行、跳转到函数定义之类的
    • 前提是 :set filetype plugin on
  • 文件类型插件的设置在

    • /usr/share/vim/vim81/ftplugin/下面
    • ftplugin = FileType Plugin
  • 回忆文件类型缩进和语法

    • indent 下的 java.vim 负责缩进
    • syntax 下的 java.vim 负责语法高亮
  • ftplugin 下的 java.vim

    • 负责针对 java文件类型 的插件

命名规则

  • 除了对于每个用户都好使的高亮、缩进和插件之外
  • 用户还可以设置只对于自己好使的高亮、缩进和插件

  • java 语言的插件来举例
  • 系统通用文件夹

    • /usr/share/vim/vim81/ftplugin/java.vim
    • /usr/share/vim/vim81/ftplugin/java_xxx.vim
    • /usr/share/vim/vim81/ftplugin/java/xxx.vim
  • 用户专用文件夹

    • ~/.vim/ftplugin/java.vim
    • ~/.vim/ftplugin/java_def.vim
    • ~/.vim/ftplugin/java/header.vim
  • 上面是命名的规则

    • java 对应的就是 filetype

文件夹不存在?

  • 如果没有文件夹的话就要新建

    • :!mkdir -p ~/.vim/ftplugin
    • 注意是 ftplugin 而不是 plugin
    • plugin 里面的插件全部都被加载
    • ftplugin 里面的插件根据文件类型加载

尝试分文件类型进行控制

  • 保存后
  • 打开 java 文件时

    • 状态栏告诉我这是 java 文件

      • 第三行 set statusline=[oeasy-java]%F%m
  • 打开 css 文件时

    • 状态栏告诉我这是 css 文件
    • 第三行 set statusline=[oeasy-css]%F%m
  • 都设置好之后
  • 分别打开java文件和css文件

强行指定

  • 如果我偏说 css 文件是 java 文件会如何呢?

    • 可以注意到状态栏的变化
    • 由于不同文件类型 filetypesyntax 文件不同
    • css 的语法去标注 java 的高亮组
    • 所以高亮显示的状态也不同

总结

  • 根据扩展名我们可以设置某些特定类型文件的配置
  • 相关文件类型的设置放在相应的文件夹里
  • 文件类型缩进文件夹

    • /usr/share/vim/vim81/indent/
  • 文件类型语法高亮文件夹

    • /usr/share/vim/vim81/syntax/
  • 文件类型插件文件夹

    • 系统通用文件夹

      • /usr/share/vim/vim81/ftplugin/java.vim
      • /usr/share/vim/vim81/ftplugin/java_xxx.vim
      • /usr/share/vim/vim81/ftplugin/java/xxx.vim
    • 用户专用插件文件夹

      • ~/.vim/ftplugin/java.vim
      • ~/.vim/ftplugin/java_def.vim
      • ~/.vim/ftplugin/java/header.vim
  • 在 文件夹~/.vim/ftplugin中 的 html.vim 的设置

    • 只针对 html
    • 包括文件的缩进、配色、语法高亮、行号、状态栏等
  • :filetype indent on 文件类型缩进生效
  • :filetype syntax on 文件类型语法高亮生效
  • :filetype plugin on 文件类型插件生效

  • 还有什么好玩的吗?
  • 下次再说

oeasy教您玩转vim - 27 - 文件类型的更多相关文章

  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教您玩转python - 006 - # hello world

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

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

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

  9. oeasy教您玩转linux010109clear清屏

     回忆上次内容 上次讲了灵魂三问 whatis whereis which 通过这三个问题,可以对命令基本了解,我们来试一下!!

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

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

随机推荐

  1. Linux进程Fork详解

    一. fork函数详解 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同 ...

  2. docker 容器镜像加速配置

    登录阿里云容器镜像服务即可看到配置加速.

  3. Flutter(三):Flutter App 可行性分析

    一.生态建设 第三方Package https://pub.dev/packages?sort=popularity 截止2021年4月,第三方库达到17000+ 二.Devops 代码风格检查 An ...

  4. matplotlib学习:搞明白plt. /ax./ fig

    原文章一:https://zhuanlan.zhihu.com/p/93423829,原文章二:https://jishuin.proginn.com/p/763bfbd23e20    感谢作者的讲 ...

  5. 【Effective C++】设计与声明——考虑写出一个不抛异常的swap函数

    wap是个有趣的函数.原本它只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来实现自我赋值可能性的一个常见机制.所谓swap两对象值,就是将两对象的值交换. 典型实现 缺省情况下的swap动作 ...

  6. 执行nodejs 内置fs模块

        执行方式1:                 在 cmd 中 任意文件夹路径下输入 node 回车                 C:\Users\32991>node         ...

  7. CF1838A-Blackboard-List

    题意简述 在黑板上有两个数字,进行如下操作 \(n-2\) 次: 每次在黑板上选择任意两个数,将两个数的差的绝对值写在黑板上. 这样你会得到一个长度为 \(n (3 \le n \le 100)\) ...

  8. 为什么魂斗罗只有128KB却能实现那么长的剧情有答案了

    PPU 首发公号:Rand_cs 本文继续讲述 NES 的基本原理,承接上文的 CPU,本文来讲述 PPU,较为复杂,慢慢来看.例子基本都是使用的魂斗罗,看完本文相信对那问题"为什么魂斗罗只 ...

  9. 关于朋友圈出现的小米新店广告骗局(非法获取个人消息)木马通过广东政务服务网(tyrz.gd.gov.cn)的url漏洞显示

    前两天在朋友圈突然看到有发 小米新店开业 送千台扫地机器人的 广告,出于天上不会掉馅饼到我身上的原则 我选择忽略了,但是没多久 看到他又晒了个物流订单,于是还是点开看了一下,发现微信打开的网站还蛮正规 ...

  10. EF MYSQL DB FIRST 出现2次数据库名

    环境:使用ADO设计器添加的数据库实体,运行时出现 :Table 'world.world.city' doesn't exist . world 是mysql的演示数据库. MySql.Data.E ...