移动

w 正向移动到下一单词开头,forward

  • 有大写版本,比如: w 区分标点为单词,W 不区分标点 b 反向移动到当前单词/上一单词开头,backward

e 正向移动到当前单词/下一单词结尾 ge 反向移动到上一单词结尾

0 行首,^ 行首非空白字符,$ 行尾 {} 文本块 gg 文件头,G 文件尾 :nnG 跳到第n行

% 在一组括号间跳转 * 跳到下一个相同词;n重复,N回退

m{a-zA-Z}设置标记,反引号`{mark}跳转到标记。小写位置标记缓冲区内部可见,大写位置标记全局可见。

ctrl-f 翻页、ctrl-b 回退 ctrl-d 翻半页、ctrl-u 回退 zz 当前行摆到屏幕中、zt 摆到屏幕顶、zb 摆到屏幕底

查找

f{char}正向移动到下一个{char}所在之处,; 重复,, 回退 F{char}反向移动 t{char}正向移动到下一个{char}所在之处的前一个字符(search till the specified character)

  • 比如dt.,从当前光标位置删除到句号之前 T{char}反向运动

/ 查找下一处匹配,? 查找上一处匹配;n 重复,N 回退 /.../e 查找下一处匹配,并将光标移到匹配的结尾

修改

. 重复上次修改 u 撤销,ctrl-r 重做 ~ 切换大小写

i 在当前光标之前添加内容,I 在当前行首加内容 a 在当前光标之后添加内容,A 在当前行尾加内容

  • ea 在当前单词结尾添加,gea 在上一单词结尾添加 o 在当前行后另起一行,O 在当前行前另起一行

s 修改当前字符:删除光标所在的字符,并进入插入模式 S 修改当前行:删除光标所在的行,并进入插入模式

cw 正向修改:删除从光标位置到单词结尾的内容并进入插入模式 cb 反向修改:删除从光标前面位置到单词开头的内容并进入插入模式 c2w 修改两个单词

删除

x 删除光标下的字符 dw 正向删除,删除从光标位置到单词结尾的内容 db 反向删除,删除从光标前面位置到单词开头的内容 daw 删除整个单词,delete a word

dl 删除字符,delete letter dd 删除行

插入模式中的删除

C-w 删除前一个单词 C-u 删除至行首

复制

y{motion} 复制(yank)

  • yy 复制当前行

p 在光标后面/下行粘贴(put)

  • xp 调换光标后面两个字符的位置
  • ddp 调换当前行和它的下一行
  • yyp 创建一行副本 P 在光标前面/上行粘贴

替换

r{char} 替换一个字符 R 进入替换模式

可视模式

v 面向字符的选择

  • vi) 选择括号内文本,va)包含括号本身 V 面向行的选择 ctrl-v 面向列的选择 o 切换选区的活动端

文本对象

i(i),i(inside);a(a),a(around或all) 各种括号类似:)、]、}、>、’、“、` itat,其中t指xml的tag

命令语法的{motion}处都可以使用文本对象,常见的比如 c{motion}、d{motion}、y{motion}

  • cit修改标签内文本,dit删除标签内文本,yit拷贝标签内文本

范围文本对象

iw 当前单词,aw 当前单词及一个空格

Ex命令

:[range]copy{address}:copy可简写为:co:t(copy to

  • :6t. 把第6行拷贝到当前行下方
  • :t6 把当前行拷贝到第6行下方

:[range]move{address}:move可简写为:m

寄存器

有名寄存器("a-"z

  • "ayiw把当前单词复制到寄存器”a,"ap粘帖寄存器”a的内容
  • 用小写字母名称,会覆盖寄存器的原有内容;用大写字母名称,会将新内容添加到寄存器的原有内容之后。

"0 复制专用寄存器,仅当使用y{motion}命令时才被赋值

"" 显式引用无名寄存器,如""p等价于p

参考

  • Vim实用技巧(第2版)