vim 的通常使用技巧

VIM 的通常使用技巧
做者: geminis   发表日期: 2006-02-15 00:14  
在每一个用户的主目录下,都有一个 vi 的配置文件".vimrc"或".exrc",用户能够编辑它,使这些设置在每次启动 vi 时,都有效。  例如,加入以下设置行:set nu 显示行号 set nonu 不显示行号 set ic 查找时不考虑大小写 set noic 查找时考虑大小写说明:在文本中[]表示选项或者简写掉的文字,但除了模式匹配里面的[],可参见模式匹配。源码:vi vim 使用vim 编辑器首先简单的说一下vi编辑器──unix的通用编辑器,读做vee-eye (visual editor的简写)。(这里的vim,是改进的vi, Vi Improved简写,Vim 由Bram Moolenaar编写)vi的工做模式分为命令模式和插入模式 以及 : ex模式;按esc键就可让vi进入命令模式;插入模式就是你输入文本的模式了。vi的一些简单操做:普通操做:插入文本命令 i 、a、I、A、o、Oi 进入命令模式输入 i ,这时候就是和普通的文本编辑器通常了;a 或者 输入 a ,不一样的是,a是在字符的后面插入追加文本,而i在字符的前面插入;I 行首插入;A 行尾插入。o 光标下新建空行O 光标上新建空行修改删除文本命令 c、x、d、Dcw 删除当前位置到该位置单词的末尾,外加插入文本; cw删除的是英文单词,中文不行的。c$ or C 删除当前位置到行末,外加插入文本。x 只删除当前字符 若是要删一个中文字的话请用 2x (固然也能够用4x 8x) 由于一个汉字占两个字符。cc 删除一行,外加能够插入文本。r 删除当前字符,外加能够插入文本。dw 只删除当前位置到这个单词末。[n]dd 删除[n]一行。 固然能够用 2dd 3dd 删除两行,三行。D 删除到行尾。粘贴,复制,合并命令 p、y、J、"(引号)p 当你执行上面的删除操做后,你所删除的文本会留在缓存中,当你输入 p 后会把这些删除的文本粘贴到当前光标后面。y 组合有(yw,4yy,y$等) //复制单词,复制四行,复制到行末 复制后可用p进行粘贴J 把下一行合并到当前行,注意J大写"[x]yy 命名你的缓冲区 在复制命令前加上冒号和名称(a到z) 例如 "ryy "d2dd "zd)复制一行到r缓冲区,删除2行到d缓冲区,删除光标到句尾到z缓冲区。"[x]p 粘贴x缓冲区到当前位置后。默认有1~9缓冲区 为前9次删除操做。可视操做命令 v、V、Ctrl+v当用gvim能够用鼠标选择你须要复制,删除的文本,而后按d(删除)、p(粘贴)、y(复制)操做你的文本,固然也能够和其余程序经过粘贴板进行共享数据。v 对于xterm中的vim 则输入命令 v 进入可视状态,这时候你能够用右键进行复制粘贴操做重复操做与撤消命令 . (点号) 、 u 、U. 重复上一次的操做,当并非那种重做,他只是重复你上次输入的命令。Ctrl+R 重作u 撤消上次操做U 撤消当前行进行的任意修改。查找文本命令 /、?、n、N/ 向后查找文本进入命令模式输入 /[你要查找的文本]; 例如找edit 输入 /edit ;? 而向前查找文本就是输入 ?[你要查找的文本] ;n 当有许多搜索结果时,命令模式下输入 n 就能够找下一个搜索结果,而输入 NN 则是反向下一个搜索结果。打开,保存与退出先进入ex模式,就是在命令模式下输入 : 再输入命令。命令 ZZ、 q、 w、 e、r:ZZ 进入命令模式 输入 ZZ (大写)就是保存+退出;:w 保存文本 进入命令模式 输入 w 就是保存;:q! 强行退出是输入 q! ;:e! 撤消当前全部编辑,返回原始状态的话,请输入 e! ;:w [filename] 另存为就是 w [filename] 。:e [filename] 打开另一个文件(打开新文件前,请先保存文件。:r [filename] 读入filename内容到当前文件的当前位置后移动光标命令 hjkl、(、)、{、}、e、w、b、gg、Ghjkl 通常可直接用键盘上的方向键进行光标的移动。而page up/down 键就是先后翻页了;或者,命令模式下 按h(左) j(下) k(上) l(右)或者在这个基础加上数字,进行几行几行的移动,例如 4j就表示向下移动四行。nG 例如200G 就是移动200行了。而Ctrl+G就是显示当前行信息(多少行,在文本的位置);G 到文件尾gg 到文件头e 另外 输入 e 能够一单词的移动光标,( 当前句首) 下一句开始 例如 2) 向前移动两个句子{ 段开始} 下一段头b、w 后前以单词为单位移动。标记命令 m、‘(单引号)、`(反引号也就是 ~ 那里那个键)m[x] 标记x(a~z)位置 例如 mb 标记当前光标位置为标志b’x 移动光标到x标记行的行首`x 移动光标到x标记的原始光标位置'' 移动到上一标记行首`` 移动到上一标记原光标位;zl zh zs ze 窗口左滚 右滚 左开始 右结束 //可设置 :set sidescroll=32 设置滚动长度(我好象用不了这个命令)其余Ctrl+L 刷屏return 到下一行行首-、+ 移动光标上下一行,上下一行的行首(好象+号要用小键盘的+号才行);Ctrl+G 显示当前行信息H 屏幕起点M 屏幕中间L 屏幕尾组合使用例子 命令模式下例子:现有文本aaabbbcccdddeeefff (光标在第一行)输入 /aab回车 d /ccc回车 那就会删除掉当前位置aab(包括aab), 到ccc前全部数据并复制数据到缓冲(和剪切差很少)。固然d也可用改为y作复制用途,再用p粘贴。vim的ex状态 当在: ex模式下能够用tab进行自动补齐命令(用: set nu 显示行数) 并能够利用 | 能够将多个命令组合在同一提示符下文本搜索,替换,移动,删除,复制命令 :g/、:s/ 、:m 、:d、:co (或者:t):g :g/[文本] 全局搜索文本,光标移动到最后一个搜索文本,并显示全部数据加所在行。:g!/[文本] 没有[文本]的行:s :[第n行],[到第m行]s/[要替换的]/[替换的] n-m行之间进行替换,若是没有n,m那么就进行当前行的替换:%/s/[要替换的]/[替换的]/g 进行全局替换。 %表示每一行, 另外有 . 表示当前行, $ 表示最后一行,另外可用+-号表示该行的上下n行,例如.-2 表示当前行上面第二行:m :[要移动的数据]m[移动的地方] 例子 :20,30m100 20-30行移动到100行前(最后一行是100行)例子: :g/^$/d 删除全部空行 d加上删除动做搜索模式.(点号) 任一个单字符,汉字用两个点 ..* 匹配前面字符零个或者多个任意(并不表示任意字符) 例如 /abcdl* 就会查找abcdl或者以abcd开始的,而查找全部是 /.*^ 表示从行首开始$ $在表达式末表示以正则表达式要在行末。/ 转义 /.表示找. /*表示找* //表示找/[ ] [0~9]表示匹配0~9之间任意一个数字 同理有[A~Z]和[a~z],而[AB3a]表示找有A,B, 3,a其中任意一个字符。/< , /> 单词开始或者末尾以空格或者标点符号开始或者结束。 例如 inux/> 匹配linux./r 回车/t 制表符执行sh命令:![shell command] 例如 :!ls添加数据到文件末 >>例子 :1,10w>>newfile须要注意的是vim能够把一些命令组合起来应用:1,3d | s/they/she/ 一到三行删除,并把当前行they替换为she:.,/while/d 删除当前行到匹配while行全部数据(包括当前行和含有while所在行):/aaa/,/bbbb/d aaa到bbbb之间行删除(包括这两行):/aaa/,/bbb/m. aaa到bbb行move到当前行分屏:[N]sp[lit] [filename] 另开窗口,高度是N行,并打开filename文件。Ctrl+w [x] 准备进行窗口操做,其中x是按Ctrl+w后,须要选择的功能键(可参见下一行) 例如Ctrl+w 再按t就会到顶端窗口Ctrl+w [s/w/t/b/c/q/r/i/=] s 再分屏,w下一个窗口,t顶窗口,b底端窗口,c关闭窗口 q退出窗口 r循环窗口 i打开并进入新窗口 =全部窗口同高:hide 隐藏当前窗口,当不关闭该文件缓冲(也就是说再次用 :e [filename] 打开后依然是先前的文件):q 关闭窗口,并释放缓冲。:qa[!] 关闭全部窗口并强行退出vim;:on[ly] 只显示当前窗口:new [filename] 新建文件并打开新窗口。:res[ize][n] :res[ize][+ -n] 改变窗口大小,或者增长减小行数用vim编程:make [arguments] 运行make 而后移动到第一个错误,:cf[ile] [!] [errorfile]读取错误文件,并移动到第一个错误处,!强迫vim移动到另外的缓冲区,:cl[ist] [!] 列出含有文件名的错误,有!就列出全部错误,:cc[!] [n] 若是有n就显示错误n,不然从新显示当前错误,:cn[ext] 移动到下一个错误。:cp 移动到上一个错误。另一个有用的编程功能是使用ctags(unix命令,给C语言中的函数打标记。这个命令与vi的tags结合使用)先用ctags命令 :!ctags file.c 建立该c程序tags文件,再在vi中使用 :tag [函数名] ,那么vi就直接调出该c原文件并跳到函数定义处。例如: :!ctags *.c:tag aaa 其中bbb.c 中有aaa函数,那么就跳到aaa的定义处:tn 跳到下一个匹配标志:tp 上一个标志设置vim:set all 显示全部选项。:set nu[mber] 显示行数。:set binary 可读二进制文件:syntax on 语法高亮:set taglength=4 设置tag长度记不住可以使用tab键补齐命令(也能够显示能够选择的命令)vim的配置文件 .vimrc在vim的安装目录下有一个vimrc_example.vim文件,你能够copy到你的工做目录上做为你的原始vim配置文件(文件更名为.vimrc)vi引证最后,这里有关vi的认证:vi是完美的论证:VI在罗马数字中是六,小于六的天然数能够整除6的是1,2,3, 6=1X2X3; 而6有能够表示为6=1+2+3,可见VI是个完美的数字,从而VI也是完美的。对于vim罗马数字中VIM可能表示为(1000-(5+1))=994,而恰好等于2×496+2,而496恰好能够被1,2,4,8,16,31,62,124,248等整除,并且1+2+4+8+16+31+62+124+248=496所以496是个更完美的数字,可见vim比vi更加完美了。