本文介绍了vim(7.4版本)的一般用法。vim是一个功能强大的文本编辑器,是vi的增强版本。vim[options][file..]使用vim编辑文件最常用的命令是:vimfile其中file可以是新文件或现有文件。执行完这样的命令后,编辑器会打开并显示文件file的内容。如图:如果是新文件,底部左边会显示“文件”[新文件]字样,右边会显示0,0-1表示行数和光标当前所在的字符。如果打开旧文件,左下角会显示“文件”3L、66C,分别表示文件名、当前光标所在行号、文件总字节数。如果文件中没有字符,它将以字符~开头。尚无法进行编辑。在vim中有几种编辑文件的模式。当前模式为普通模式,可以移动光标,执行复制粘贴等命令;还有两种常见的模式:插入模式和底线模式。普通模式一般用于一开始就进入。按以下键进入插入模式:a从光标所在的下一个字符开始输入a从光标所在行的末尾开始输入i从光标所在的位置开始输入i从行首开始输入光标所在行o在光标所在行下新增一行,并在新行开头开始打字O在光标所在行上方新增一行,并在新行开头开始打字line进入插入模式后,最下面会出现--insert-字;现在您可以在光标位置输入。要从插入模式返回到正常模式,请按ESC键。在普通模式下,按以下键进入底线模式::执行命令/向前搜索?反向搜索从底行模式返回到普通模式,按两次ESC键执行底行模式:q(quit)表示退出编辑器,如果文件内容已经改变,需要执行:wq(写quit)保存退出;如果不保存退出,需要执行:q!强制退出;强制保存并退出是:wq!。下面列出了在普通模式下可以执行的一些命令及其作用:文本修改:.重复前面的命令x删除光标位置的字符d从光标处剪切dd在光标位置剪切整行(保存在Temporarybuffer)nddn是一个数字,表示从当前行开始,从上到下裁剪n行,p将buffer中的内容放在当前行的下方。npn是一个数字,相当于执行n次p命令。把当前行上面的内容y从光标处开始复制yy复制当前行(存放在临时缓冲区)nyyn是一个数字,表示从当前行开始,从上到下复制n行r替换一个at光标位置从光标位置替换字符R,进入文本输入模式(ESC退出)u撤销上次操作ZZ保存退出移动光标:h或左方向键将光标向左移动l或右箭头键将光标向右移动一个空格j或向下箭头键将光标向下移动一个空格k或向上箭头键将光标向上移动一个空格0光标移动到当前行的开头^光标移动到当前行的非空白字符(如空格、tab键等)的行首$光标移动到当前行的行尾g_cursor到当前行非空白字符的行尾w光标到下一个单词的开头e光标到结尾下一个词的*匹配光标所在的词,移动到下一个相同的词#matchcursor的词,移动到上一个相同的词与其他字符F}光标移动到当前行的上一个字符}t,光标移动到当前行T,下一个逗号前一个字符,光标移动到当前行上一个逗号后一个字符,%移动到成对括号的另一半,包括(){}[]。光标需要先移动到括号上级。gg将光标移动到文件开头***lineG将光标移动到文件开头***line回车键将光标移动到下一行开头这里只列出了一部分,初学者可能会发现太难记了。其实只要记住其中的几个,就可以用;大多数其他功能都是为了让您的操作更轻松、更快捷。vim中的各种命令大部分都可以组合使用:比如要删除光标当前位置直到行尾,可以执行d$;例如,要在当前位置插入50个'word',只需执行50iwordESC,然后按ESC键,即可插入50个单词;比如你想粘贴复制的内容,但是你想粘贴5次,那就执行5p;比如你想再执行5次最后一条命令,那就执行5次。提高写文件的速度。在插入模式下(普通模式下按a、i、o等),输入单词的开头,然后按CTRL-P或CTRL-N自动补全。底行模式有三个起始字符(:、/、?),其中/和?用于匹配模式搜索:比如在文件中搜索字符串centos:/centos输入这个字符串回车后,vim会把所有匹配的字符串高亮显示,按n键,光标会跳转到下一个匹配字符串,按N键,光标会跳转到上一个匹配。(思考人查询)使用?and/做同样的事情,但相反。:可以执行很多命令,比如前面介绍的保存退出命令:wq。下面介绍一些底行模式命令::setnu显示行号setnonu隐藏行号rfile读取文件file的内容写入当前编辑的文件,从当前位置下一行开始插入内容光标。:wfile将当前编辑的内容写入一个新的文件file。:s/pattern/string/用string替换字符串匹配pattern:x和:wq效果一样,保存退出。:!command暂时离开vim,执行shellcommand命令。:help查看帮助:.=显示当前行号:=显示总行数:n移动光标到第n行行首-l还可以组合其他模式下的命令,比如替换当前所有匹配的模式字符串line::s/pattern/string/g#g表示全局,比如替换本文件中所有匹配的模式字符串::%s/pattern/string/g#%表示所有行,比如替换指定行的匹配字符串::n,ms/pattern/string/g其中n和m是数字,代表行号。你可以使用点。代表当前行。比如删除当前行到第五行的内容::.,5d当当前行在第五行以下时,会有反向删除提示。当使用/pattern和:s/pattern/string时,pattern是用于匹配字符串模式的正则表达式。正则表达式和前面介绍的通配符(基本命令介绍2)有一些相似之处,但要注意区分两者的区别。通配符主要用来匹配文件名,而正则表达式不仅可以用来匹配文件名,实际上它可以匹配任何字符串。它比通配符更通用,大多数编程语言和一些工具(如vim、grep、awk、sed)都直接支持正则表达式。下面介绍一些会用到的正则表达式的概念和用法:匹配位置:^表示行首$表示行尾<表示词首>表示词尾匹配字符:.表示匹配任意单个字符(相当于?)[...]表示匹配括号内的任意单个字符[^...]表示匹配任意未列出的字符#参考通配符说明\a匹配英文字符,相当于[a-zA-Z]或[[:alpha:]]。\A匹配非英文字符,相当于[^a-zA-Z]。\d匹配数字,相当于[0-9]或[[:digit:]]。\D匹配非数字,相当于[^0-9]。\x匹配一个十六进制数字,相当于[0-9A-Fa-f]或[[:xdigit:]]。\X匹配非十六进制数字,相当于[^0-9A-Fa-f]。\w匹配一个词,相当于[0-9A-Za-z_]。\W匹配非单词,等价于[^0-9A-Za-z_]。\t匹配TAB字符。\s匹配一个空白字符,相当于[\t]或[[:blank:]]。\S匹配非空字符,相当于[^\t]。\u匹配大写字母,相当于[A-Z]或[[:upper:]]。\U匹配非大写字母。\n匹配一个换行符\r匹配一个回车符(...)匹配并捕获,并使用\1\2\3...来引用捕获的字符串。|表示逻辑或匹配次数:*表示匹配前一个字符零到任意次数,相当于{0,}。+表示匹配前一个字符一到任意次,相当于{1,}。?表示将前一个字符零到一次匹配,相当于{0,1}。#注意通配符的区别?{n,m}表示匹配前一个字符n到m次。在使用正则表达式时,有时需要在特殊字符前加上转义符“\”,使特殊字符只代表其字面意义,而不是其特殊含义。在特定工具中使用正则表达式时也需要这样做,以避免工具本身解释特殊字符。vim使用以下正则表达式时,需要对特殊字符进行转义:\<...\>,\{n,m},\(...\),\?,\+,\|解释一下vim中的模式匹配和一些命令的用法来匹配字符串world并使光标停留在匹配行后的第三行行首:/world/+3在第三行行首添加注释符号//到第八行::3,8s/^/\/\//注意这里使用了行首符^和转义符'\',如:%g/^\sxyz/normaldd函数该命令的作用是全局匹配一个空格后跟xyz行,在普通模式下执行命令dd比如匹配6个以上的小写字母:/\a\{6,}比如交换冒号两边的字符串::s/\(.*\):\(.*\)/\2:\1/#注意如何引用之前匹配的组,比如改变所有tag,tog和tugtohat,hotandhut:%s/t\([aou]\)g/h\1t/g比如匹配hello或者world两个词:/\
