首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
X86
» Vim 实用技术,第 3 部分 定制 Vim(3)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
Vim 实用技术,第 3 部分 定制 Vim(3)
发短消息
加为好友
look_w
当前离线
UID
1066743
帖子
8283
精华
0
积分
4142
阅读权限
90
在线时间
233 小时
注册时间
2017-6-23
最后登录
2019-5-18
论坛元老
UID
1066743
1
#
打印
字体大小:
t
T
look_w
发表于 2018-5-18 21:29
|
只看该作者
Vim 实用技术,第 3 部分 定制 Vim(3)
第 58-64 行:在系统支持 wildmenu 特性(“:help 'wildmenu'”)启用文本模式的菜单。
第 59 行:打开 wildmenu 选项,启动具有菜单项提示的命令行自动完成。
第 60 行:确保字符序列“<C-Z>”被理解为 Ctrl-Z 而不是分开的五个字符(“:help 'cpoptions'”)。
第 61 行:设置使用 Ctrl-Z 激活自动完成提示。
第 62-63 行:把正常模式和插入模式下的 F10 映射成执行菜单项,并自动提示菜单内容。注意缺省菜单仍不会自动载入,我使用该特性的主要目的是在文本模式的 Vim 中使用 CVS 菜单。图 16 是按 F10 键后再按 Tab 键的结果。
图 16
第 66-161 行:使用自动命令(autocmd)特性的设置。使用“has”来防止该部分内容在不支持自动命令的 Vim 版本中运行。
第 67-129 行:定义了若干个下面的自动命令会用到的函数,具体在下面的自动命令中讲。请注意在每个“function”之后都用了一个“!”(“:help E122”):这也是为了方便调试,让“source ~/.vimrc”能正确运行而不会报告函数已定义的错误。
第 131-133 行:只要没有将环境变量 VIM_HATE_SPACE_ERRORS 的值设为零,则把变量 c_space_errors 的值设为 1——效果是在 C/C++ 代码中“不正确”的空白字符(行尾的空白字符和紧接在制表符之前的空格字符)将会被高亮显示。图 17所示的代码中,第 3 行的行尾多了两个空格,第 5 行的第一个制表符之前多了个空格。Vim 提示#935 里有一些额外的说明。同时请参看对第 160 行的说明。
图 17
第 135 行:使用的英文拼写变体为加拿大风格,即:使用拼写“abridgement”(而不是“abridgment”)、“colour”(而不是“color”)、“realize”(而不是“realise”)、“theatre”(而不是“theater”)等,比较符合中国人一般的英语教科书中的拼写方式,也比较适合于写“国际”英语。
第 138 行:使用键盘映射“\a”来查看光标下字符的属性,主要用于调试 Vim 的语法文件。图 18显示了光标下的字符所属的语法“组”为 vimOption,使用配色方案中的 PreProc(预处理符号)项,前景色为紫色(RGB:#a020f0)。有兴趣可查看 Vim 脚本#383 的具体内容。
图 18
第 140 行:在函数找不到时(“:help FuncUndefined”),自动在运行环境(Linux 下一般为 ~/.vim)的 autoload 目录下读入与函数名同名的 .vim 文件。这是脚本#383 的建议安装方式(SyntaxAttr.vim 文件放在 autoload 目录下,仅在执行时载入)。
第 142 行:设置适用于 C/C++ 文件的选项(1.4 节)。
第 143 行:把补丁文件的缩进和制表符宽度设定设成和 C/C++ 文件相同(1.4 节)。
第 144 行:取消 Vim 对 HTML 标记自动产生的缩进,但打开自动缩进选项(1.4 节)。
第 145 行:对于变更日志类型的文件,设置行宽为 76 个字符(1.12 节)。
第 147 行:当文件后缀为“.gb”时,认为这是一个 GBK 编码的文件,在读入文件之前(“:help BufReadPre”)调用函数 SetFileEncodings 把原先的 fileencodings 选项的内容保存在本缓冲区的一个变量中(3.1.1 节),然后把 fileencodings 设成 gbk,即只尝试对文件内容作为 GBK 字符序列来解释。
第 148 行:类似于上面把“.big5”后缀的文件当作 Big5 编码的文件,在读入文件之前把 fileencodings 设成 big5,只尝试对文件内容作为 Big5 字符序列来解释。
第 149 行:类似于上面把“.nfo”后缀的文件当作 CP437 编码(即英文 DOS 的 OEM 字符集编码)的文件。效果可参看图 19。
图 19
第 150 行:在读入 .gb、.big5 或 .nfo 文件之后(“:help BufReadPost”),调用函数 RestoreFileEncodings 恢复保存起来的 fileencodings 原数值。
第 151 行:对于 .txt 后缀的文件,在显示文件时(“:help BufWinEnter”,确保在模式行被执行之后)调用函数 CheckFileEncoding 检查文件是否已修改并且 fileencoding 设有数值。条件满足的话说明该文件在模式行中修改了 fileencoding,因而使用该编码(“:help ++enc”)重新强制(“!”)读入该文件以保证文件被正确解码。Vim 提示#911 里有一些额外的说明。
第 153 行:在遇到 HTML 文件时,如果 Vim 判断出的编码类型和 HTML 代码中使用“<meta http-equiv="Content-Type" content="text/html; charset=编码">”规定的编码不一致,将使用网页中规定的编码重新读入该文件。函数 ConvertHtmlEncoding 会把一些网页中使用的编码名称转换成 Vim 能够正确处理的编码名称;函数 DetectHtmlEncoding 在判断文件类型确实是 HTML 之后,会记下当前的光标位置,并搜索上面这样的 HTML 代码行,找出字符集编码后,在编码不等于当前文件编码(fileencoding)时且当前文件编码为空或等于系统判断出的文件编码时,使用该编码强制重新读入文件,忽略任何错误(“silent!”)。该自动命令写成是可嵌套执行的(“:help autocmd-nested”),目的是保证语法高亮显示有效,且上次打开文件的光标位置能够正确保持。Vim 提示#1074 里有一些额外的说明。
第 155-156 行:确保把 /usr/include/c++ 和 /usr/include/g++-3 目录下的所有文件都当成 C++ 类型的文件,不管 Vim 原先认定这些文件类型是什么(“:help BufEnter”)。C++ 的很多标准头文件(如“algorithm”)没有文件后缀,缺省情况下不会被 Vim 当作 C++ 文件。
第 158 行:第 142 行把 C/C++ 文件的制表符宽度设成了 4(个人设置),但系统的源代码一般使用 GNU 编码规范,制表符宽度为 8。该行设置所有 /usr 目录下的文件都使用 GNU 编码规范(1.4 节)。
第 160 行:在写文件之前(“:help BufWritePre”),调用函数 RemoveTrailingSpace:只要没有将环境变量 VIM_HATE_SPACE_ERRORS 的值设为零,则对于文件类型为 C、C++、Vim 脚本类型的文件,自动悄悄清除所有的行尾空白字符;“normal m`”记忆当前的光标位置,“normal ``”恢复记忆下来的光标位置。
至此为此,我已经介绍了 Vim 的基本知识、很多实用技巧和一些最常用的 Vim 插件,并通过定制 .vimrc 文件介绍了脚本的基本知识。如果有需要进一步深入学习 Vim 或是想提什么关于 Vim 的特定问题的话,不妨参加从 Vim 的网站上参加 Vim 的邮件讨论列表,应该会获益良多。而作者也希望本文至此也已经完成了引导读者学习、了解 Vim 的高级特性的任务。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议