Vim 实用技术,第 3 部分 定制 Vim(2)
- UID
- 1066743
|
Vim 实用技术,第 3 部分 定制 Vim(2)
3.2. 我的 .vimrc作为一个 Vim 脚本的一个具体示例,我将讲解一下最实用的情况,我的 .vimrc 文件。文件 .vimrc.html (请到本地打开) 是我的 .vimrc 文件通过以下步骤生成的 HTML 文件:
1. 在 Vim 中打开 .vimrc 文件;
2. 执行命令“:colorscheme koehler”(缺省配色可能在浏览器中效果不佳)
3. 执行命令“:%!nl -w4 -s' '”(1.11 节)
4. 执行命令“:TOhtml”(1.13 节)
5. 执行命令“:w”
可以把浏览器中的文本内容粘贴到 Vim 中,然后使用下面这个替换命令“:%s/^ \+[0-9]\+ //”删除前面的行号,来恢复出最初的 .vimrc 文件。
下面逐行进行讲解,并包含理解其内容所需的资料的链接。建议大家直接阅读 .vimrc 文件的内容,并在有疑问时查阅下面的解释。
第 1 行:注释(3.1.2 节末段),其中包含一个模式行(1.4 节和 1.5 节)。
第 2 行:首先判断系统是否具有“自动命令”(autocmd)的支持,有的话才执行第3到第六行的内容(1.1 节、“:help has”和“:help feature-list”)。
第 3 行:纯注释(后面我将跳过注释行不再说明)。
第 4 行:清除所有的自动命令(“:help autocmd-remove”),以方便调试,可以使用“source ~/.vimrc”查看一些修改后的效果(“:help source”)。
第 6 行:对于后缀为“.asm”的文件,认为其是微软的 Macro Assembler 格式(“:help masm-syntax”)。
第 7 行:与第 2 行的 if 语句配对。
第 8-10 行:当使用了图形界面时(“:help feature-list”),确保所有的文件类型会在菜单“语法”(“Syntax”)下出现,而不是出现一个菜单项“Show filetypes in menu”。缺省行为可以让 Vim 启动得更快一点点。
第 11-13 行:当使用了图形界面,并且环境变量 LANG 中不含“.”(即没有规定编码)时,把 Vim 的内部编码设为 UTF-8。
第 14 行:不需要保持和 vi 非常兼容(“:help 'compatible'”)。
第 15 行:执行 Vim 缺省提供的 .vimrc 文件的示例,包含了打开语法加亮显示等最常用的功能。
第 16 行:打开自动缩进(1.4 节)。
第 17 行:缺省不产生备份文件(“:help 'backup'”)。
第 18 行:在输入括号时光标会短暂地跳到与之相匹配的括号处,不影响输入(“:help 'showmatch'”)。
第 19 行:正确地处理中文字符的折行和拼接(1.12 节)。
第 20 行:可自动识别的文件类型为带 BOM 字符的 Unicode 文件、UTF-8 编码的文件和 GBK 编码的文件。
第 21 行:设置状态行,使其能额外显示文件的编码信息,如图 2 中的“gbk”和“big5”(“:help 'statusline'”)。
图 2第 22-24 行:如果该 Vim 支持鼠标,则启用鼠标支持(1.3 节)。
第 25-29 行:判断 Vim 是否包含多字节语言支持(multi_byte 特性),并且版本号(“:help v:version”)大于 6.1(包含 ambiwidth 选项)。
第 26-28 行:如果 Vim 的语言(“:help v:lang”;受环境变量 LANG 影响)是中文(zh)、日文(ja)或韩文(ko)的话,将模糊宽度的 Unicode 字符的宽度(ambiwidth选项,1.2 节)设为双宽度(double)。
第 31-36 行:改变上、下方向键行为方式:通常情况下这些键的作用范围是逻辑行,所以如果行很长的话光标的移动可能会不太方便;这些键盘映射把这些键的作用范围改成屏幕行(“help gk”),还为习惯使用“j”、“k”的人增加了映射“Ctrl-j”和“Ctrl-k”作用于屏幕行。前面四个映射使用的命令是“noremap”,作用于正常模式、可视模式和命令执行时;后面两个映射使用的命令是“inoremap”,仅作用于插入模式,其中使用“Ctrl-O”临时执行一个普通模式的命令(“:help i_CTRL-O”)。
第 38-41 行:在 Vim 中的插入模式中可以使用“Ctrl-R =”计算整数表达式的数值,但 Vim 本身没有计算浮点表达式的能力。这四个映射提供了浮点表达式的计算能力:使用“\ma”(假设 Leader 字符为缺省的“\”,参见“:help <Leader>”)可将计算的结果放到下一行上(待计算的表达式为当前行或在可视模式选中的内容),使用“\mr”则用计算的结果替换待计算的表达式(同样为当前行或在可视模式选中的内容)。这些映射假设有一个命令“calcu”可用来计算一个表达式的内容。该命令可用下面的 shell 脚本简单实现:
1
2
3
4
| #! /bin/sh
echo "$*" | sed -e $'s/\r$//' -e 's/sin *(/s(/g' -e 's/cos *(/c(/g' -e 's/atan *
(/a(/g' -e 's/log *(/l(/g'
-e 's/exp *(/e(/g' | bc -l
|
该脚本把表达式转换成 bc [1] 能接受的形式(把“sin(x)”转换成“s(x)”,等等),并通过标准输出送到 bc 的标准输入。
该映射较为复杂,此处不详加解释了——其中心思想都是选取待计算的表达式,放到无名寄存器中,然后使用“Ctrl-R"”粘贴到命令行上,使用 calcu 进行计算,再把结果粘贴回正在编辑的缓冲区中;最后一个最复杂,因为为了替换原先的表达式,还需要记住原先被选中的内容的起始和结束位置,你可能希望看一下“:help gv”、“:help v_o”、“:help m”、“:help `”,并复习节 1.11。可以注意一下,在映射中使用了“<silent>”(“:help map-<silent>”),这会防止命令行上回显执行的内容。
第 43-44 行:允许用户使用 F2 来取消搜索/替换的加亮显示。此处一个映射用于正常模式(nmap),一个用于插入模式(imap)。上面已经提过一次,“Ctrl-O”可以在插入模式中执行一个正常模式的命令。
第 46-47 行:这两个映射用于 taglist 插件,使用 F9 直接打开(或关闭)taglist 的窗口。
第 49-50 行:方便快速修订窗口(1.10 节)的使用,可使用 F11(和 F12)查看下一个(上一个)错误(或 grep 项等)。
第 52-65 行:一些适用于文本模式运行的 Vim 的设定;详见下面的具体说明。
第 54-56 行:将变量 Tlist_Inc_Winwidth 的值设为 0,防止 taglist 插件改变终端窗口的大小(有些情况下会引起系统不稳定)。使用“has('eval')”是让该语句仅在功能较为完整、至少支持表达式的 Vim 版本中运行。 |
|
|
|
|
|