vim 快捷键
光标移动
h,j,k,l 上,下,左,右
w 光标移到下一个字首,按标点或单词分割
W 光标移到下一个字首,长跳,如end-of-line被认为是一个字
e 光标移到下一个字尾
E 光标移到下一个字尾,长跳
b 光标移到上一个字
B 光标移到上一个字,长跳
0 光标移至行首,不管有无缩进,就是跳到第0个字符
^ 光标移至行首的第一个字符
$ 光标移至行尾
gg 光标移至文首
G 光标移至文尾
5gg/5G 光标移至第5行
gd 光标移至当前光标所在的变量的声明处
z 重画屏幕,当前光标变成屏幕的第一行 (redraw current line at top of window)
Ctrl-e 移动页面
Ctrl-d 下翻半页
Ctrl-u 上翻半页
Ctrl-b 上翻一页
Ctrl-f 下翻一页
插入模式
a 在光表后插入 (append after cursor) A 在一行的结尾插入 (append at end of the line) i 在光标前插入 (insert before cursor) I 在第一个非空白字符前插入 (insert before first non-blank) o 光标下面插入一个新行 (open line below) O 光标上面插入一个新行 (open line above) Esc 退出插入模式
负责粘贴指令
y 复制 (yank line) yy 复制当前行 (yank current line) y5y 复制5行 yw 复制一个字 yY 复制到行末 P 粘贴粘贴板的内容到当前行的下面 p 粘贴粘贴板的内容到当前行的上面
“{a-z或A-Z}y 把信息复制到某个寄存{a-z或A-Z}中(yank the link into register {a-z or A-Z}) 例如我用 “ayy 复制一行到寄在a,然后我再用“byw复制一个单词在寄存b。粘贴的时候,我们就可以选择贴a里面的东西还是b里面的,这个就好像是多个复制版一样
“{a-z或A-Z}p 将某个寄存{a-z或A-Z}的内容贴出来 (paste from register) 例如“ap那么就在当前光标下贴出我们之前在寄存a中的内容,“bP就在当前光标上贴出我之前寄存b的内容
reg 显示所有寄存中的内容 (list all registers)
“*y 这个是把信息复制进系统的复制版(可以在其他程序中贴出来)(yank to OS buffer) “*p 从系统的剪贴板中读取信息贴入vim (paste from OS buffer to vim)
删除指令
x 删除当前字符 X 删除前一个字符 d 删除 (delete) dw 删除一个单词(word) 5dw 删除5个词 dd 删除光标所在行 5dd 删除5行 d/D 删除到行末
c 跟d键一样,但是删除后进入输入模式 (same as “d” but after delete, in insert mode) S 删除一行(好像dd一样)但是删除后进入输入模式 (same as “dd” but after delete, in insert mode) s 删除字符,跟(d)一样,但是删除后进入输入模式 (same as “d” but after delete, in insert mode) s4s 会删除4个字符,进入输入模式 (delete 4 char and put in insert mode)
搜索替换指令
搜索 fx 在当前行中找x字符,找到了就跳转至 ; 重复上一个f命令,而不用重复的输入fx
-
查找光标所在处的单词,向下查找
查找光标所在处的单词,向上查找
n 下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个) N 上一个匹配(同上) /pattern 向后搜索字符串pattern ?pattern 向前搜索字符串pattern “\c” 忽略大小写 “\C” 大小写敏感 :%s/old/new/g 搜索整个文件,将所有的old替换为new :%s/old/new/gc 搜索整个文件,将所有的old替换为new,每次都要你确认是否替换
替换 r 替换单个字符 (replace characters) R 替换多个字符 (replace mode – continue replace) gr 不影响格局布置的替换 (replace without affecting layout)
高级功能 % 查找下一个结束,例如在”(“下查找下一个”)”,可以找”()”, “[]” 还有shell中常用的 if, else这些 (find next brace, bracket, comment or #if/#else/#endif) 下面直接用几个例子说话 /a* 这个会搜到 a aa aaa /(ab)* 这个会搜到 ab abab ababab /ab+ 这个会搜到 ab abb abbb /folers= 这个会搜到 folder folders /ab{3,5} 这个会搜到 abbb abbbb abbbbb /ab{-1,3} 这个会在abbb中搜到ab (will match ab in abbb) /a.{-}b 这个会在axbxb中搜到axb (match ‘axb’ in ‘axbxb’) /a.b 会搜索到任何a开头后面有b的 (match ab any) /foo|bar 搜索foo或者bar,就是同时搜索2个词 (match ‘foo’ or ‘bar’) /one|two|three 搜索3个词 (match ‘one’, ‘two’ or ‘three’) /(foo|bar)+ 搜索foo, foobar, foofoo, barfoobar等等 (match ‘foo’, ‘foobar’, ‘foofoo’, ‘barfoobar’ … ) /end(if|while|for) 搜索endif, endwhile endfor (match ‘endif’, ‘endwhile’, ‘endfor’) /forever&… 这个会在forever中搜索到”for”但是不会在fortuin中搜索到”for” 因为我们这里给了&…的限制 (match ‘for’ in ‘forever’ will not match ‘fortuin’) 特殊字符前面加^就可以 (for special character, user “^” at the start of range) /”[^”]*” 这里解释一下 ” 双引号先引起来 (double quote) [^”] 任何不是双引号的东西(any character that is not a double quote)
- 所有的其他 (as many as possible) ” 结束最前面的引号 (double quote close)
上面那个会搜到“foo” “3!x”这样的包括引号 (match “foo” -and “3!x” include double quote) 更多例子,例如搜索车牌规则,假设车牌是 “1MGU103” 也就是说,第一个是数字,3个大写字母,3个数字的格式。那么我们可以直接搜索所有符合这个规则的字符 (A sample license plate number is “1MGU103″. It has one digit, three upper case letters and three digits. Directly putting this into a search pattern) 这个应该很好懂,我们搜索 \数字\大写字母\大写字母\大写字母\数字\数字\数字 /\d\u\u\u\d\d\d 另外一个方法,是直接定义几位数字(不然要是30位,难道打30个\u去?) (specify there are three digits and letters with a count) /\d\u{3}\d{3} 也可以用范围来搜索 (Using [] ranges) /[0-9][A-Z]{3}[0-9]{3} 用到范围搜索,列出一些范围(range) 这个没什么好说了,看一下就都明白了,要全部记住。。。用的多了就记住了,用的少了就忘记了。每次看帮助,呵呵 /[a-z] /[0123456789abcdef] = /[0-9a-f] \e \t \r \b 简写 (item matches equivalent) \d digit [0-9] \D non-digit [^0-9] \x hex digit [0-9a-fA-F] \X non-hex digit [^0-9a-fA-F] \s white space [ ] ( and ) \S non-white characters [^ ] (not and ) \l lowercase alpha [a-z] \L non-lowercase alpha [^a-z] \u uppercase alpha [A-Z] \U non-uppercase alpha [^A-Z] :help /[] 特殊的定义的,可以在vim中用用help来看 (everything about special) :help /\s 普通的也可以直接看一下 (everything about normal)
%s/abc/def/ 替换abc到def (substitute abc to def) 例如,%s/four/4/g,将全部的four替换成4
%s/abc/def/c 替换abc到def,会每次都问你确定(substitute on all text with confirmation (y,n,a,q,l)) 1,5s/abc/def/g 只替换第一行到第15行之间的abc到def (substitute abc to def only between line 1 to 5) 54s/abc/def/ 只替换第54行的abc到def (only substitute abc to def on line 54)
六、信息过滤 (filter)