oeasy教您玩转vim - 27 - 文件类型
文件类型
回忆上节课内容
上次了解了缩进的各种方式
- 正常模式下用
<<
缩进 - 插入模式下用
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
文件会如何呢?- 可以注意到状态栏的变化
- 由于不同文件类型
filetype
的syntax
文件不同 - 用
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 - 文件类型的更多相关文章
- oeasy教您玩转vim - 56 - # 字符可视化模式
可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...
- oeasy教您玩转vim - 57 - # 行可视化
可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...
- oeasy教您玩转vim - 53 - # 批量替换
查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...
- oeasy教您玩转linux010203显示logo
我们来回顾一下 上一部分我们都讲了什么?
- oeasy 教您玩转linux010101查看内核uname
linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...
- oeasy教您玩转linux010202软件包管理apt
顾一下 上一部分我们都讲了什么?
- oeasy教您玩转python - 006 - # hello world
Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...
- oeasy教您玩转linux010201持续输出yes
我们来回顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010109clear清屏
回忆上次内容 上次讲了灵魂三问 whatis whereis which 通过这三个问题,可以对命令基本了解,我们来试一下!!
- oeasy教您玩转linux010108到底哪个which
到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?
随机推荐
- Linux进程Fork详解
一. fork函数详解 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同 ...
- docker 容器镜像加速配置
登录阿里云容器镜像服务即可看到配置加速.
- Flutter(三):Flutter App 可行性分析
一.生态建设 第三方Package https://pub.dev/packages?sort=popularity 截止2021年4月,第三方库达到17000+ 二.Devops 代码风格检查 An ...
- matplotlib学习:搞明白plt. /ax./ fig
原文章一:https://zhuanlan.zhihu.com/p/93423829,原文章二:https://jishuin.proginn.com/p/763bfbd23e20 感谢作者的讲 ...
- 【Effective C++】设计与声明——考虑写出一个不抛异常的swap函数
wap是个有趣的函数.原本它只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来实现自我赋值可能性的一个常见机制.所谓swap两对象值,就是将两对象的值交换. 典型实现 缺省情况下的swap动作 ...
- 执行nodejs 内置fs模块
执行方式1: 在 cmd 中 任意文件夹路径下输入 node 回车 C:\Users\32991>node ...
- CF1838A-Blackboard-List
题意简述 在黑板上有两个数字,进行如下操作 \(n-2\) 次: 每次在黑板上选择任意两个数,将两个数的差的绝对值写在黑板上. 这样你会得到一个长度为 \(n (3 \le n \le 100)\) ...
- 为什么魂斗罗只有128KB却能实现那么长的剧情有答案了
PPU 首发公号:Rand_cs 本文继续讲述 NES 的基本原理,承接上文的 CPU,本文来讲述 PPU,较为复杂,慢慢来看.例子基本都是使用的魂斗罗,看完本文相信对那问题"为什么魂斗罗只 ...
- 关于朋友圈出现的小米新店广告骗局(非法获取个人消息)木马通过广东政务服务网(tyrz.gd.gov.cn)的url漏洞显示
前两天在朋友圈突然看到有发 小米新店开业 送千台扫地机器人的 广告,出于天上不会掉馅饼到我身上的原则 我选择忽略了,但是没多久 看到他又晒了个物流订单,于是还是点开看了一下,发现微信打开的网站还蛮正规 ...
- EF MYSQL DB FIRST 出现2次数据库名
环境:使用ADO设计器添加的数据库实体,运行时出现 :Table 'world.world.city' doesn't exist . world 是mysql的演示数据库. MySql.Data.E ...