vim实用技巧,快捷键记录
按键说明 语法 动词 d 删除 delete r 替换 replace c 修改 change y 复制 yank v 选取 visual select
名词 text object w 单词word s 句子 sentence p 段落paragraph t HTML标签tag u 撤销(undo) . 重复最后一个命令 引号或者各种括号所包含的文本称作一个文本块。
介词 介词界定了待编辑文本的范围或者位置。例如:i “在…之内”inside a “环绕…”around t “到…位置前”to f “到…位置上”forward
组词为句 动词+介词+名词删除一个段落 delete inside paragraph: dip 选取一个句子 visual select inside sentence: vis 修改一个单词 change inside word: ciw 修改一个单词 change around word: caw 删除文本直到字符“x”(不包括字符“x”)delete to x: dtx 删除文本直到字符“x”(包括字符“x”)delete forward x:dfx
数词 动词+介词/数词+名词修改三个单词 change three words: c3w 删除两个单词 delete two words: d2w
数词也可以修饰动词,表示将操作执行 n 次 数词+动词+名词两次删除单词(等价于删除两个单词) twice delete word: 2 dw 三次删除字符(等价于删除三个字符)three times delete character: 3 x
移动光标 行 0 跳转到当前行首^ 跳转到当前行的第一个非空字符(空格/TAB) $ 跳转到当前行的末尾 gg 跳转到文件第一行(goto ) G 跳转到文件最后一行 47 G 跳转到文件第47 行:47 跳转到文件第47 行(同"47G" )
字符 f[char ] 跳转到第一个[char ]字符(find) 3f [char ] 跳转到第三个[char ]字符F[char ] 向左跳转到第一个[char ]字符 t[char ] 跳转到第一个[char ]字符的前一个字符(till before - right) T[char ] 向左跳转到第一个[char ]字符的后一个字符(till after - left) ; 重复最后一次的 f/F/t/T 移动命令 这里加 shift 大写,意为反向:向左
单词和文本块 w 跳转到下一个单词的开头(word) 3 w 跳转到第三个单词的开头e 跳转到下一个单词的结尾(end of word) b 跳转到上一个单词的开头(backward beginning) ( 跳转到上一个句子的开头 ) 跳转到下一个句子的开头 { 跳转到上一个段落的开头 } 跳转到下一个段落的开头
代码块 % 在当前大括号/中括号/小括号的开始位置"{/[/(" 和结束位置"}/]/)" 之间跳转 [[ 跳转到上一个函数的开头(如果光标在函数体内则跳转到当前函数的开头) ]] 跳转到下一个函数的开头 [{ 跳转到当前程序块的开头(当前程序块为当前程序的上一层,不是固定的) ]} 跳转到当前程序块的结尾
搜索 /[word] 搜索[word]字符串 ?[word] 向上搜索[word]字符串 n 跳转到下一个匹配的字符串(保持最后一个搜索命令的方向)(next match) N 跳转到上一个匹配的字符串(保持最后一个搜索命令的方向) * 搜索当前光标下的单词 # 向上搜索当前光标下的单词
插入模式 s 删除光标位置下的字符并进入插入模式 S 删除当前行内容并进入插入模式
删除 x 删除光标位置下的字符 dw 删除光标之后的单词剩余部分(delete word) diw 删除一个单词 dd 删除当前行 D 删除从光标位置到当前行的末尾(同"d$" ) df[char ] 删除从光标位置到[char ]字符(delete find [char ]) d) 删除从光标位置到下一个句子的开始 d} 删除从光标位置到该段落的末尾 di{ 删除花括号之间的内容(delete inner {})(同"diB" ) di( 删除小括号之间的内容(delete inner ())(同"dib" ) dit 删除闭合标签之间的内容(html/xml等标签,delete inner tag) dat 删除左右尖括号及之间的内容(delete a tag) da< 删除左右尖括号及之间的内容(delete a <>) di" 删除引号之间的内容(delete inner " ") da" 删除左右引号及之间的内容(delete a "" ):5 ,10 d 删除5 -10 行 3 dd 删除从当前行开始的3 行<C-w> 删除光标前的一个单词(插入模式) <C-u> 从光标位置删除到行首(插入模式) 这里加 shift 大写,意为行尾 注:"d" /"c" 开头的命令会将删除的文本放到寄存器(通过":reg" 查看),可以理解为剪切。 关于"a" n和"i" nner可以参考":help object-select" 文本对象选择部分 另:一般向右的操作包含光标下的字符,向左的操作不包含光标下的字符
更改文本 J 将下一行合并的当前行的末尾(Join line) 3 ,9 j 合并3 -9 行~ 切换光标下字符的大小写 u 更改选定的文本为小写(可视模式) U 更改选定的文本为大写(可视模式) <C-a> 把当前光标下或之后的数值加1 <C-x> 把当前光标下或之后的数值减1 r[char ] 替换光标下的字符为[char ]. (replace) R 进入替换模式 cw 删除光标之后的单词剩余部分并进入插入模式(change word) cc 删除当前行内容并进入插入模式(同"S" ) C 删除从光标位置到当前行的末尾并进入插入模式(同"c$" ) cf[char ] 删除从光标位置到[char ]字符并进入插入模式 这里"c" 开头加 shift 大写,意为行尾 "c" 开头"change" 更改(删除并插入),"d" 开头"delete" 删除,和"y" 开头"yank/copy" ,格式相同,可相互参考使用
缩进 >> 缩进当前行 << 向左缩进当前行 <C-d> 缩进当前行(插入模式) <C-t> 向左缩进当前行(插入模式) :3 ,9 >>>>> 将3 -9 行缩进5 个TAB > 缩进选定的行(可视模式) < 向左缩进选定的行(可视模式) >i{ 缩进花括号之间的内容(indent inner {})(同">iB" ) >a{ 缩进花括号及之间的内容(indent a {})(同">aB" ) =} 缩进当前段落 gg=G 全文缩进/格式化
复制粘贴 v 进入可视模式,以字符为单位选择 V 进入可视模式,以行为单位选择 <C-v> 进入列块可视模式(如果映射"<C-v>" 为"粘贴" 时请注意) gv 重新选择最后选定的区域 y 抽出选择的文本到寄存器(可视模式)(yank/copy) "+y 抽出选择的文本到系统剪切板(可视模式)(好像不太好使) :co 10 复制当前行到第11行(copy) :co . 复制当前行到下一行(同" yyp") :5,10co 20 复制5-10行到第21行 yy 复制当前行 y$ 复制到行尾 yw 复制光标之后的单词剩余部分(yank word) yb 复制光标之前的单词剩余部分 yiw 复制一个单词 yip 复制当前段落(yank inner paragraph) yas 复制一个句子(yank a sentence) yi< 复制尖括号之间的内容(Yank inner <>) 11y 复制11行 p 粘贴(paste) P 粘贴到光标前 <C-r>" 粘贴(插入模式)"ayy 复制当前行到寄存器" a"(可使用范围" a-z") " ap 粘贴从寄存器"a" 这里的"寄存器" 即VIM剪切板
滚动屏幕 H 跳转到屏幕的顶部(home) M 跳转到屏幕的中间(middle) L 跳转到屏幕的底部(low) zt 将当前行滚动至屏幕顶部(top) zz 将当前行滚动至屏幕中间(同"z." ) zb 将当前行滚动至屏幕中间(bottom)(同"z-" ) <C-f> 滚动至下一页(forwards) <C-b> 滚动至上一页(backwards) <C-d> 向下滚动半屏(downwards) <C-u> 向下滚动半屏(upwards)
键映射 :map 查看已映射的键列表 :imap 查看插入模式下已映射的键列表 :nmap 查看普通模式下已映射的键列表 :imap jj <Esc> 插入模式下键入"jj" 映射到"<ESC>" (返回普通模式) :nmap <C-h> <C-w>h 普通模式下映射"<C-h>" 到"<C-w>h" (光标移动到左边一个窗口)
键位图
绿色键:motion,移动光标,或定义操作的范围
黄色键:command,直接执行的命令,红色命令进入编辑模式
橙色键:operator,后面跟随表示操作范围的指令
灰色键:extra,特殊功能,需要额外的输入