学习vi和vim编辑器(15):vim对vi的主要改进
vim对vi做了大量改进,本章将讨论在vim中添加的主要功能:包括内置帮助功能、启动与初始化选项、新的移动命令、扩展的正则表达式、扩展的撤销、自定义可执行文件等。
内置帮助功能:
vim的说明文档超过10万行,几乎所有的说明都可以通过vim内置的帮助工具取得,使用它最简单的形式就是调用" :help "命令。使用内置的帮助功能需要了解vi的导航技巧,知道如何在标签间前进与后退。当光标处于某个标签上时,按下" CTRL+] "前往该标签,按下" CTRL+T "或者" CTRL+O "从该标签返回。
" :help "命令后面可以包含帮助主题,我们输入的主题字符串可能会与现在vim帮助主题里的某个字符串符合。例如输入" help split "再按下tab键后,help命令会在与"split"相关的帮助主题字符串间循环,例如"split()"、":split"等等,想看某个帮助主题,直接按下enter键即可。
启动与初始化选项:
vim可以使用不同的机制在启动时设置环境,vim也可以使用一系列初始化文件来定义并调整难以计数的行为组合。想要了解vim的启动细节,可以使用":help startup"命令。
命令行选项:
vim的命令行选项提供了灵活性与威力。有些选项可以调用额外功能,有的选项可以抑制默认行为。在命令行选项后面,可以列出一个或多个待编辑的文件,文件名甚至可以为" - ",让vim知道输入来自标准输入。接下来列出部分vim有但vi没有的命令行选项(vim已包含了所有vi选项):
-b:在二进制模式中编辑;
-c command:command将被视为ex命令执行;
-C:以兼容(vi)模式运行vim;
-cmd command:command在vimrc文件前执行,这也是-c选项的长形式;
-d:以diff模式启动。vim执行2-4个文件的diff功能以及可以设置选项来简化文件差异的查看。在UNIX中vim使用系统的diff命令来执行diff任务,在Windows上则可下载另行提供的可执行文件;
-E:以改进的ex模式启动;
-g:启动gvim(GUI);
-m:关闭写入选项,此时不能修改缓冲区;
-o:所有文件均各自打开窗口。可以指定要打开的窗口数量(以整数指定,紧跟在o选项后面),命令行中列出的文件分别于指定数量的窗口中打开。若窗口数超过文件数,vim打开空白窗口,以满足数量需求。如果窗口数小于文件数,则将剩下的文件放入vim的缓冲区中;
-O:与" -o "一样,但打开垂直分隔的窗口;
-y:以easy模式运行vim,对初学者而言这个选项会使vim有较为直观的行为,但经验丰富的用户反而会对此觉得困惑;
-Z:以restricted模式运行,基本上关闭所有外部接口并防止对系统功能访问;
与命令名称相关的行为:
vim有两种版本:图形版和文字版,UNIX用户只需要简单地使用下列命令,即可获得所需行为:
vim:启动文字版vim;
gvim:启动图形版vim。通常,gvim和vim是两个不同的可执行程序。gvim需要在编译vim时打开所有GUI选项。也可以使用" vim -g "启动gvim,在UNIX中,gvim需要X Window System;
view,gview:以只读模式启动vim或gvim。与" vim -R "相同;
rvim:以restrictive模式启动vim,所有对shell命令的外部访问均被禁止;
rgvim:和rvim相同,但用于图形版;
rview:与view相同,但于restricted模式中启动;
rgview:与rview相同,但用于图形版;
evim,eview:于编辑或只读查看时使用easy模式。这个命令没有相应的图形版,因为gvim已经被视为简单的操作方式;
vimdiff,gvimdiff:以"diff"模式启动并比较输入文件的差异;
ex,gex:使用ex行编辑器。与" vim -e "相同。
系统与用户的配置文件:
vim依照特定的顺序寻找初始化文件,它执行找到的第一组指令(可能以环境变量或文件的形式出现),然后开始编辑。所以Vim在下列清单中遇到的第一个项目,就是清单中被执行的唯一项目。顺序如下:
1,VIMINIT:环境变量,如果变量不为空,Vim将它的内容作为ex命令执行;
2,用户的vimrc文件:vimrc(vim资源)初始化文件是个跨平台的文件,在UNIX系统中,vim寻找的该文件的位置为:" $HOME/.vimrc "(注意,在UNIX中,如果" .vimrc "文件不存在,也会尝试寻找" _vimrc "文件);
3,环境变量EXINIT:EXINIT变量的内容也将作为ex命令执行;
4,用户的exrc文件:类似于vimrc文件。在UNIX系统中,vim寻找该文件的位置为" $HOME/.exrc ";
5,exrc选项:如果设置了vim的exrc选项,vim会在当前目录下寻找三个额外的配置文件。在UNIX中分别为".vimrc","_vimrc",".exrc";
原书中并没有将3和4项列出,可能书中认为这两个搜寻位置严格意义上其实是用来对vi编辑器进行初始化的,可以参考《学习vi和vim编辑器(10):高级编辑方法(1)》。但是毕竟在这两个位置进行设置也能完成对vim编辑器的初始化,所以我认为应该明确的将这两个位置也列出。而且在原书中5也没有指定是当前目录。关于vim初始化搜寻的顺序可以通过":help startup"了解更多,那里帮助文档写得很清楚。
vimrc文件是配置vim编辑特性较好的地方,几乎任何选项都可以在该文件中设置。以下是vimrc的一些注意事项:
1,注释都以双引号(")开始,可位于一行的任意位置。所有位于双引号后的文本,包括双引号都会被忽略;
2,可用(也可不用)冒号表示ex命令;
3,如果一大组选型定义能分开为不同行,这个文件将较容易管理;
环境变量:
有许多环境变量影响到vim的启动及编辑时的行为,这里列出最为明显的且在未配置时会以默认值处理的环境变量:
新的移动命令:SHELL:指定vim用于执行shell命令的shell;
TERM:设置vim内部的internal term选项。但这个选项其实不太需要,编辑器会以自己觉得适当的方式设置其终端;
MYVIMRC:覆盖vim对初始化文件的搜索。如果启动时找到MYVIMRC的值,vim假设这个值是初始化文件的名称,如果文件存在,则从中取得初始化设置,并不再搜寻其他文件;
VIMINIT:指定vim启动时欲执行的命令。命令间以竖线分隔即可定义多个命令;
EXINIT:与VIMINIT相同;
VIM:包含标准vim安装系统信息的系统目录路径;
VIMRUNTIME:指向vim支持的文件,例如在线说明文档,插件目录等。通常vim能自己找出这些文件;
vim提供所有vi移动命令,同时增加了一些命令:
Ctrl+end:转至文件最后一行的最后一个字符,如果加上数字,则以数字指定行,跳到该行的最后一个字符;
Ctrl+home:转至文件第一行的第一个非空字符。或者可以使用gg命令。(Ctrl+end 和 Ctrl+home 这两个移动命令在我测试时都不起作用,暂时把这个问题先记下来吧);
count%:转至依据文件百分比计算出的行。光标置于该行附近第一个非空白的行。而且需要注意,vim以文件的行数作为计算依据,而不是以总字符数为依据;
:go n 或者n go: 转至缓冲区的第n个字节,所有字符包括行末字符都计算在内;
可视模式的移动:
vim能够让用户以可视化的方式定义所选项,且在此可视化所选项上执行编辑命令。这个功能和在图形化编辑器中点击并拖动鼠标造成的高亮效果很像。vim在定义可视选择项时,也能让我们使用其它的命令以及一些特殊的可视模式命令。
在正常模式中输入v即进入可视模式(再次输入v即可关闭可视模式)。进入可视模式后,任何移动光标的命令除了将光标移动到新位置,沿途还会以高亮显示文本。而且,在可视模式中,vim使用一些特有命令,方便我们借由选择光标附近的文本对象而选择文本:
countaw,countaW:选择count指定的单词数量。分隔单词的空格不视为一个词。小写的w将标点符号也视为一个词,而大写W只以空格作为单词的分隔符;
countiw,countiW:和上条命令类似,只不过将分隔单词的空格也视为一个词;
as,is:增加选择一个句子,或增加选择内部句子(inner sentence,不含空格);
ap,ip:增加选择一个段落,或增加选择内部段落;
想要了解文本对象更多细节内容,可以使用帮助命令" :help text-objects "。
扩展的正在表达式:
vim提供丰富的正则表达式匹配工具,具体可以参考《vi和vim编辑器》 P173。
自定义可执行文件:
当前计算机对全功能的vim可执行文件已经提供了充足的处理能力,我们可以取用所有的vim扩展功能,且确信其性能表现良好。但某些情况下,需要获取功能较为简洁的vim。此时,比起使用新选项重新配置,重新编译和安装vim,实在简单多了。
本章vim命令总结:
":help","CTRL+]","CTRL+T","CTRL+O",vim的"-b"、"-c"、"-C"、"-cmd"、"-d"、"-E"、"-g"、"-m"、"-o"、"-O"、"-y"、"-Z"选项,vim,gvim,view,gview,rvim,rgvim,rgview,evim,eview,vimdiff,gvimdiff,ex,gex,"Ctrl+end","Ctrl+home","gg","count%",":go n","n go","countaw",
"countaW","countiw","countiW","as","is","ap","ip"。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。