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.vimjava对应java.vimhtml对应html.vim不同的文件类型可以设置不同的缩进
c缩进为8java缩进为4html缩进为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的位置怎么办?
随机推荐
- PhiData 一款开发AI搜索、agents智能体和工作流应用的AI框架
引言 在人工智能领域,构建一个能够理解并响应用户需求的智能助手是一项挑战性的任务.PhiData作为一个开源框架,为开发者提供了构建具有长期记忆.丰富知识和强大工具的AI助手的可能性.本文将介绍Phi ...
- Android 13 - Media框架(9)- NuPlayer::Decoder
关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们将了解 NuPlayer::Decoder,学习如何将 MediaCodec wrap 成一个强大的 Decoder.这一节会提前讲到 M ...
- 使用node压缩js
先下载并安装Node 安装完成后打开cmd运行:node -v 运行:npm -v 确定node安装成功,然后安装uglifyjs,打开cmd输入下面命令: npm install uglify-js ...
- ReplayKit2 有线投屏项目-反向Socket实现
一.需求 我们在使用RTMP协议进行推流的时候,底层仍然采用的是TCP协议或者QUICK协议,有客户端主动发起请求.但是在有线投屏中,需要PC端向手机发起请求建立连接 二.实现 在客户端主动发起请求之 ...
- 算法学习笔记(30):Kruskal 重构树
Kruskal 重构树 这是一种用于处理与最大/最小边权相关的一个数据结构. 其与 kruskal 做最小生成树的过程是类似的,我们考虑其过程: 按边权排序,利用并查集维护连通性,进行合并. 如果我们 ...
- SpringBoot系列(五) 接口校验(非空、非法字符/特殊字符、长度等)
1.引入pom依赖 <dependency> <groupId>javax.validation</groupId> <artifactId>valid ...
- spark读取hive表,org.apache.spark.sql.AnalysisException: Unsupported data source type for direct query on files: hive;
异常出现:spark读取hive表时,spark.read.table(hive.test) hdp版本的spark默认的catalog是spark,配置项 metastore.catalog.def ...
- MYSQL8存储过程生成日历表以及异常处理
一.环境 数据库:mysql8.0.25 社区版 操作系统:windows 11 ------------------------------------ 二.创建日历表 CREATE TABLE ` ...
- python重拾第十二天-sqlalchemy ORM
本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 orm英文全称object relational mapping ...
- STM32学习笔记:创建标准库工程模板
背景 标准库下载:地址 本章的项目可以在这里下载. STM32作为一类经典的MCU.本人从2018年1月1日开始对于STM32系列单片机的学习. 本人所持的型号为:STM32F429ZI-DISCOV ...