移动
w 正向移动到下一单词开头,forward
- 有大写版本,比如:
w区分标点为单词,W不区分标点b反向移动到当前单词/上一单词开头,backward
e 正向移动到当前单词/下一单词结尾
ge 反向移动到上一单词结尾
0 行首,^ 行首非空白字符,$ 行尾
{、} 文本块
gg 文件头,G 文件尾
:n或nG 跳到第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)
各种括号类似:)、]、}、>、’、“、`
it、at,其中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版)