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的位置怎么办?
随机推荐
- 多进程池Flask实战应用
多进程池Flask实战应用 import json import math import flask from concurrent.futures import ProcessPoolExecuto ...
- 什么是Base64算法
HTTP是超文本传输协议,所以HTTP协议中请求.相应都是以ASCII字符方式传输,如果要传输二进制需要经过BASE64或MIME等编码(因为HTTP协议pop3.smtp邮件协议都是针对文本的,而F ...
- LLM 大模型学习必知必会系列(三):LLM和多模态模型高效推理实践
LLM 大模型学习必知必会系列(三):LLM和多模态模型高效推理实践 1.多模态大模型推理 LLM 的推理流程: 多模态的 LLM 的原理: 代码演示:使用 ModelScope NoteBook 完 ...
- 一款功能强大的Python工具,一键打包神器,一次编写、多平台运行!
1.项目介绍 Briefcase是一个功能强大的工具,主要用于将Python项目转化为多种平台的独立本地应用.它支持多种安装格式,使得Python项目能够轻松打包并部署到不同的操作系统和设备上,如ma ...
- 【论文笔记】GoogLeNet系列
[深度学习]总目录 Inception技术演进 Inception-V1: 2014年9月,<Going Deeper with Convolutions>提出了Inception模块,在 ...
- 【VMware vSphere】使用vSphere Lifecycle Manager(vLCM)管理独立主机和集群的生命周期。
vSphere Lifecycle Manager(vLCM)是 vSphere 7 中引入的一项新功能,它提供了一种集中式.自动化和简单性的方式来管理和升级 vSphere 基础架构组件(如vCen ...
- k8s——istio
安装istio Istio / 入门 [root@master ~]# curl -L https://istio.io/downloadIstio | sh - % Total % Received ...
- GNU GDB
1 说明 本文主要介绍一些简单的.常用的gdb调试技巧. 环境:GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1) 参考文档:<gdb ...
- .NET 8 IApplicationBuilder详解
在上节中我们已经得知 WebApplication 实现了 IApplicationBuilder,我们浅谈了其pipe特质和构建方法,本节中将深入了解 ApplicationBuilder 以窥探 ...
- dubbo~全局异常拦截器的使用与设计缺陷
异常拦截器ExceptionMapper 在JAX-RS(Java API for RESTful Web Services)中,ExceptionMapper接口用于将Java异常映射到HTTP响应 ...