转载于这里
@H_404_3@"/*========================================*\ @H_404_3@" 常用指令收集 @H_404_3@"\*========================================*/ @H_404_3@" 系统时间 @H_404_3@" :map <F7> a<C-R>=strftime("%c@H_404_3@")<CR><esc> @H_404_3@" :s/__date__/\=strftime("%c@H_404_3@")/ @H_404_3@"/*---------------------------------------*\ @H_404_3@" 基础命令 @H_404_3@"/*---------------------------------------*\ @H_404_3@" ctrl+q 可以联合复制,粘贴,替换用 行操作 @H_404_3@" ctrl+w+j ctrl+w+k (:bn :bp :bd) @H_404_3@" '. 它移动光标到上一次的修改行 @H_404_3@" `. 它移动光标到上一次的修改点 @H_404_3@" . 重复上次命令 @H_404_3@" <C-O> : 依次沿着你的跳转记录向回跳 (从最近的一次开始) @H_404_3@" <C-I> : 依次沿着你的跳转记录向前跳 @H_404_3@" ju(mps) : 列出你跳转的足迹 @H_404_3@" :history : 列出历史命令记录 @H_404_3@" :his c : 命令行命令历史 @H_404_3@" :his s : 搜索命令历史 @H_404_3@" q/ : 搜索命令历史的窗口 @H_404_3@" q: : 命令行命令历史的窗口 @H_404_3@" g ctrl+g 计算文件字符 @H_404_3@" {,} 前进至上一段落前进至后一段落 @H_404_3@" gg,G(2G) 文件首 @H_404_3@" gd dw gf ga(进制转化) @H_404_3@" gg=G 全篇自动缩进,=G 单行缩进 @H_404_3@"* ci[ 删除一对 [] 中的所有字符并进入插入模式 @H_404_3@"* ci( 删除一对 () 中的所有字符并进入插入模式 @H_404_3@"* ci< 删除一对 <> 中的所有字符并进入插入模式 @H_404_3@"* ci{ 删除一对 {} 中的所有字符并进入插入模式 @H_404_3@"* cit 删除一对 HTML/XML 的标签内部的所有字符并进入插入模式 @H_404_3@"* ci” ci’ ci` 删除一对引号字符 (” 或 ‘ 或 `) 中所有字符并进入插入模式 @H_404_3@" @H_404_3@"* vi[ 选择一对 [] 中的所有字符 @H_404_3@"* vi( 选择一对 () 中的所有字符 @H_404_3@"* vi< 选择一对 <> 中的所有字符 @H_404_3@"* vi{ 选择一对 {} 中的所有字符 @H_404_3@"* vit 选择一对 HTML/XML 的标签内部的所有字符 @H_404_3@"* vi” vi’ vi` 选择一对引号字符 (” 或 ‘ 或 `) 中所有字符 @H_404_3@" crl+] 函数原型处 crl+t 回 ( ctags ) @H_404_3@" ctl+p 自动补全( 编辑状态 ) @H_404_3@" :X 加密保存( 要输入密码 ) @H_404_3@" ? / (N n) @H_404_3@" f(F,t) 查找字符 @H_404_3@" w(e) 移动光标到下一个单词. @H_404_3@" 5fx 表示查找光标后第 5 个 x 字符. @H_404_3@" 5w(e) 移动光标到下五个单词. @H_404_3@" b 移动光标到上一个单词. @H_404_3@" 0 移动光标到本行最开头. @H_404_3@" ^ 移动光标到本行最开头的字符处. @H_404_3@" $ 移动光标到本行结尾处. @H_404_3@" H 移动光标到屏幕的首行. @H_404_3@" M 移动光标到屏幕的中间一行. @H_404_3@" L 移动光标到屏幕的尾行. @H_404_3@" c-f (即 ctrl 键与 f 键一同按下) @H_404_3@" c-b (即 ctrl 键与 b 键一同按下) 翻页 @H_404_3@" c-d (下半页) c-u(上半页) c-e (一行滚动) @H_404_3@" zz 让光标所在的行居屏幕中央 @H_404_3@" zt 让光标所在的行居屏幕最上一行 @H_404_3@" zb 让光标所在的行居屏幕最下一行 @H_404_3@" 在 vi 中 y 表示拷贝,d 表示删除,p 表示粘贴. 其中拷贝与删除是与光标移动命令 @H_404_3@" yw 表示拷贝从当前光标到光标所在单词结尾的内容. @H_404_3@" dw 表示删除从当前光标到光标所在单词结尾的内容. @H_404_3@" y0 表示拷贝从当前光标到光标所在行首的内容. @H_404_3@" d0 表示删除从当前光标到光标所在行首的内容. @H_404_3@" y$(Y) 表示拷贝从当前光标到光标所在行尾的内容. @H_404_3@" d$(D) 表示删除从当前光标到光标所在行尾的内容. @H_404_3@" yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容. @H_404_3@" dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容. @H_404_3@" s(S),a(A),x(X),D @H_404_3@" yy 表示拷贝光标所在行. @H_404_3@" dd 表示删除光标所在行. @H_404_3@" 5yy 表示拷贝光标以下 5 行. @H_404_3@" 5dd 表示删除光标以下 5 行. @H_404_3@" y2fa 表示拷贝从当前光标到光标后面的第二个a字符之间的内容. @H_404_3@" :12,24y 表示拷贝第12行到第24行之间的内容. @H_404_3@" :12,y 表示拷贝第12行到光标所在行之间的内容. @H_404_3@" :,24y 表示拷贝光标所在行到第24行之间的内容. 删除类似. @H_404_3@" TAB 就是制表符,单独拿出来做一节是因为这个东西确实很有用. @H_404_3@" << 输入此命令则光标所在行向左移动一个 tab. @H_404_3@" >> 输入此命令则光标所在行向右移动一个 tab. @H_404_3@" 5>> 输入此命令则光标后 5 行向右移动一个 tab. @H_404_3@" :5>>(>>>) :>>(>>>)5 @H_404_3@" :12,24> 此命令将12行到14行的数据都向右移动一个 tab. @H_404_3@" :12,24>> 此命令将12行到14行的数据都向右移动两个 tab. @H_404_3@" :set shiftwidth=4 设置自动缩进 4 个空格,当然要设自动缩进先. @H_404_3@" :set sts=4 即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格. @H_404_3@" :set tabstop=4 实际的 tab 即为 4 个空格,而不是缺省的 8 个. @H_404_3@" :set expandtab 在输入 tab 后,vim 用恰当的空格来填充这个 tab. @H_404_3@" :g/^/exec 's/^/'.strpart(line('.').' ',4) 在行首插入行号 @H_404_3@" set ai 设置自动缩进 @H_404_3@" 5ia<esc> 重复插入5个a字符 @H_404_3@"/*---------------------------------------*\ @H_404_3@" 替换命令 @H_404_3@"/*---------------------------------------*\ @H_404_3@" 替换文字 2009-02-34 ----> 2009-02-34 00:00:00 @H_404_3@" :%s/\(\d\{4\}-\d\{2\}-\d\{2\}\)/\1 00:00:00/g @H_404_3@" :s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb @H_404_3@" :s/\/bb/g 将光标所在行出现的所有 aa 替换为 bb,仅替换 aa 这个单词 @H_404_3@" :%s/aa/bb/g 将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb @H_404_3@" :12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb @H_404_3@" :12,23s/^/#/ 将从12行到23行的行首加入 # 字符 @H_404_3@" :%s/fred/joe/igc 一个常见的替换命令,修饰符igc和perl中一样意思 @H_404_3@" s/dick/joe/igc则 对于这些满足条件的行进行替换 @H_404_3@" :g/^\s*$/d 空行(空格也不包含)删除. @H_404_3@" :%s/\r//g 删除DOS方式的回车^M @H_404_3@" :%s/ *$// 删除行尾空白(%s/\s*$//g) @H_404_3@" :g!/^dd/d 删除不含字符串'dd'开头的行 @H_404_3@" :v/^dd/d 同上,译释:v == g!,就是不匹配! @H_404_3@" :v/./.,/./-1join 压缩空行(多行空行合并为一行) @H_404_3@" :g/^$/,/./-j 压缩空行(多行空行合并为一行) @H_404_3@" :g/^/pu _ 把文中空行扩增一倍 (pu = put),原来两行间有一个空行,现在变成2个 @H_404_3@" :g/^/m0 按行翻转文章 (m = move) @H_404_3@" :g/fred/,/joe/d not line based (very powerfull) @H_404_3@" :g/<input\|<form/p 或者 要用\| @H_404_3@" :g/fred/t$ 拷贝行,从fred到文件末尾(EOF) @H_404_3@" :%norm jdd 隔行删除,译释:%指明是对所有行进行操作,norm指出后面是normal模式的指令,j是下移一行,dd是删除行 @H_404_3@" :'a,'bg/fred/s/dick/joe/igc ('a,'b指定一个范围:mark a ~ mark b) @H_404_3@" g//用一个正则表达式指出了进行操作的行必须可以被fred匹配,g//是一个全局显示命令 @H_404_3@" /joe/e 光标停留在匹配单词最后一个字母处 @H_404_3@" /joe/e+1 光标停留在匹配单词最后一个字母的下一个字母处 @H_404_3@" /joe/s 光标停留在匹配单词第一个字母处 @H_404_3@" /^joe.*fred.*bill/ 标准正则表达式 @H_404_3@" /^[A-J]\+/ 找一个以A~J中一个字母重复两次或以上开头的行 @H_404_3@" /forum\(\_.\)*pent 多行匹配 @H_404_3@" /fred\_s*joe/i 中间可以有任何空白,包括换行符\n @H_404_3@" /fred\|joe 匹配FRED或JOE @H_404_3@" /\<fred\>/i 匹配fred,fred必须是一个独立的单词,而不是子串 @H_404_3@" /\<\d\d\d\d\> 匹配4个数字 \<\d\{4}\> @H_404_3@" 列,替换所有在第三列中的str1 @H_404_3@" :%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2: @H_404_3@" 交换第一列和最后一列 (共4列) @H_404_3@" :%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1: @H_404_3@" 全局(global)显示命令,就是用 :g+正则表达式 @H_404_3@" 译释: :g/{pattern}/{cmd} 就是全局找到匹配的,然后对这些行执行命令{cmd} @H_404_3@" :g/\<fred\>/ 显示所有能够为单词fred所匹配的行 @H_404_3@" :g/<pattern>/z#.5 显示内容,还有行号 @H_404_3@" :g/<pattern>/z#.5|echo '==========' 漂亮的显示 @H_404_3@"/*---------------------------------------*\ @H_404_3@" 多文档操作 (基础) @H_404_3@"/*---------------------------------------*\ @H_404_3@" 用 :ls! 可以显示出当前所有的buffer @H_404_3@" :bn 跳转到下一个buffer @H_404_3@" :bp 跳转到上一个buffer @H_404_3@" :wn 存盘当前文件并跳转到下一个 @H_404_3@" :wp 存盘当前文件并跳转到上一个 @H_404_3@" :bd 把这个文件从buffer列表中做掉 @H_404_3@" :b 3 跳到第3个buffer @H_404_3@" :b main 跳到一个名字中包含main的buffer @H_404_3@"/*---------------------------------------*\ @H_404_3@" 列复制 @H_404_3@"/*---------------------------------------*\ @H_404_3@" 译注:@#%&^#*^%#$! @H_404_3@" :%s= [^ ]\+$=&&= : 复制最后一列 @H_404_3@" :%s= \f\+$=&&= : 一样的功能 @H_404_3@" :%s= \S\+$=&& : ft,还是一样 @H_404_3@" 反向引用,或称记忆 @H_404_3@" :s/\(.*\):\(.*\)/\2 : \1/ : 颠倒用:分割的两个字段 @H_404_3@" :%s/^\(.*\)\n\1/\1$/ : 删除重复行 @H_404_3@" 非贪婪匹配,\{-} @H_404_3@" :%s/^.\{-}pdf/new.pdf/ : 只是删除第一个pdf @H_404_3@" 跨越可能的多行 @H_404_3@" :%s/<!--\_.\{-}-->// : 又是删除多行注释(咦?为什么要说「又」呢?) @H_404_3@" :help /\{-} : 看看关于 非贪婪数量符 的帮助 @H_404_3@" :s/fred/<c-r>a/g : 替换fred成register a中的内容,呵呵 @H_404_3@" 写在一行里的复杂命令 @H_404_3@" :%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/ @H_404_3@" 译注:就是用 | 管道啦 @H_404_3@"/*---------------------------------------*\ @H_404_3@" 大小写转换 @H_404_3@"/*---------------------------------------*\ @H_404_3@" g~~ : 行翻转 @H_404_3@" vEU : 字大写(广义字) @H_404_3@" vE~ : 字翻转(广义字) @H_404_3@" ~ 将光标下的字母改变大小写 @H_404_3@" 3~ 将下3个字母改变其大小写 @H_404_3@" g~w 字翻转 @H_404_3@" U 将可视模式下的字母全改成大写字母 @H_404_3@" gUU 将当前行的字母改成大写 @H_404_3@" u 将可视模式下的字母全改成小写 @H_404_3@" guu 将当前行的字母全改成小写 @H_404_3@" gUw 将光标下的单词改成大写。 @H_404_3@" guw 将光标下的单词改成小写。 @H_404_3@" 文件浏览 @H_404_3@" :Ex : 开启目录浏览器,注意首字母E是大写的 @H_404_3@" :Sex : 在一个分割的窗口中开启目录浏览器 @H_404_3@" :ls : 显示当前buffer的情况 @H_404_3@" :cd .. : 进入父目录 @H_404_3@" :pwd @H_404_3@" :args : 显示目前打开的文件 @H_404_3@" :lcd %:p:h : 更改到当前文件所在的目录 @H_404_3@" 译释:lcd是紧紧改变当前窗口的工作路径,% 是代表当前文件的文件名, @H_404_3@" 加上 :p扩展成全名(就是带了路径),加上 :h析取出路径 @H_404_3@"/*========================================*\ @H_404_3@" END @H_404_3@"\*========================================*/