光标定位:
h,j,k,l 分别用于光标左移,下移,上移,右移一个字符
Ctrl+b 将屏幕向文件首方向翻滚一整屏(即PgUp)
Ctrl+f 将屏幕向文件尾方向翻滚一整屏(即PgDn)
H 将光标移至当前屏幕首行的行首(即左上角)
nH 将光标移至当前屏幕第N行的行首
M 将光标移至当前屏幕显示文件的中间行的行首
L 将光标移至当前屏幕最后一行的行首
nL 将光标移至当前屏幕的倒数第N行的行首
w 将光标右移至下一个字的字首
e 如果光标起始位置处于字内,则该命令将把光标移动到本字字尾;如果光标起始位置处于字尾,则该命令将把光标移动到下一个字的字尾
b 如果光标起始位置处于字内,则该命令将把光标移动到本字字首;如果光标起始位置处于字首,则该命令将把光标移动到上一个字的字首
0 移动到光标所在行的行首
$ 移动到光标所在行的行尾
^ 移动到光标所在行的第一个字符(非空格)
替换和删除:
rc 用字符c替换光标所指向的当前字符
nrc 用字符c替换光标及其右侧的n个字符
x 删除光标处的字符
nx 删除从光标所在位置开始向右的n-1个字符
dw 删除一个单词。若光标处的某个词的中间,则从光标所在位置开始删除移至删除到词尾(连空格一起删)
ndw 删除n个指定的单词
db 如果光标在某个单词首字母上,删除该词之前的一个词,如果光标在某个单词中间,删除光标所在位置之前的那部分单词
ndb 如果光标在某个单词首字母上,删除该词之前的n个词,如果光标在某个单词中间,删除光标所在位置之前的那部分单词及其之前的n-1个词
dd 删除光标所在的整行(剪切)
ndd 删除当前行及其后的n-1行的内容
复制和粘贴:
yy 将当前行的内容复制到缓冲区
nyy 将当前开始的n行内容复制到缓冲区
p 将缓冲区的内容写到光标所在行的下一行
撤销和重复:
/str 往右移动到有str的地方
?str往左移动到有str的地方
n 向相同的方向移动到有str的地方
N向相反的方向移动到有str的地方
退出:
u 取消前一次的误操作或不合适的操作对文件造成的影响,使之恢复到这种误操作或不合适操作被执行之前的状态
. 再执行一次前面刚完成的某个复杂的命令
ZZ 存盘退出
ZQ 作废退出
:n 直接输入要移动到的行号即可实现跳行
:q 退出vi
:wq 保存退出vi
:q!不保存退出vi
文件相关:
:w file 将当前编辑的内容存盘
:n1,n2 w file 将从n1开始到n2结束的行写到file文件中
:nw file 将第n行写到file文件中
:1,.w file 将从第1行起到光标当前位置的所有内容写到file文件中
:.,$w file 将从光标当前位置到文件结尾的所有内容写到file文件中
:r file 打开另一个文件file
:e file 新建file文件
:f file 把当前文件改名为file文件,保存后,新名字的文件及原文件都存在(相当于“另存为”)
字符串搜索、替换、删除:
:/str/ 把当前光标开始往右移动到有str的地方
:?str? 把当前光标开始往左移动到有str的地方
:/str/ w file 将含有str的行写到文件file中
:/str1/ ,/str2/ w file 把从含str1行开始到含str2行结束的内容写到file文件
:s/str1/str2/ 将第一个str1替换为str2(光标需停到含str1的行)
:s/str1/str2/g 将所有的str1替换为str2(光标需停到含str1的行)
:.,$s/str1/str2/g 将从当前位置到结束的所有的str1替换为str2
文本的复制、移动和删除:
:n1,n2 co n3 将从n1开始到n2为止的所有内容复制到n3后面
:n1,n2 m n3 将从n1开始到n2为止的所有内容移动到n3后面
:d 删除当前行
:nd 删除整个文件的第n行;
:dn 删除从当前行开始的n行
:n1,n2 d 删除从n1开始到n2为止的所有内容
:.,$d 删除从当前行到结尾的所有内容
:/str1/ ,/str2/d 删除含str1行开始到含str2行为止的所有内容
执行shell命令:
:!Cmd 运行shell命令Cmd
:n1,n2 w !Cmd 将n1到n2行的内容作为Cmd命令的输入,如果不指定n1和n2,则将整个文件的内容作为命令Cmd的输入
:r!Cmd 将命令运行的结果写入当前行位置