vi常用命令

a #当前字符后添加
A #行尾添加文本
o #光标下方开始一个新行
O #光标上方开始一个新行
ZZ #保存并退出
zz #当前行与光标一起移到窗口中间
w #光标移至下一个单词的词首,W 的作用与 w 相同但以空格作为单词的分隔
e #光标移至下一个单词的词尾,E 的作用与 e 相同但以空格作为单词的分隔
b #光标移至前一个单词的词首,B 的作用与 b 相同但以空格作为单词的分隔
ge #光标移至前一个单词的词尾
$ #光标至行尾
0 #行首
^ #行首第一个非空字符
fx #向前查找本行中的字符 x
Fx #向左查找本行中的字符 x
tx #与 fx 相似,只是光标会移到目标字符的前
Tx #与 Fx 相似,只是光标会移到目标字符的前
#以上四个命令执行后可以使用";"重复向前查找,","则用于反向查找
% #向前找到第一个括号字符,或者匹配对应的一对括号
G #移至文件最后一行
gg #移至文件第一行
1G #移至文件第一行
50G #移至第50行
50% #移至文件的50%处,也就是中间的位置
H #移至当前窗口文本的最顶端
M #移至当前窗口文本的中间
L #移至当前窗口文本的最下方
^U #向上滚动半屏
^D #向下滚动半屏
^E #上滚一行
^Y #下滚一行
^F #向下翻页
^B #向上翻页
zz #光标所在行移至窗口中间
zt #光标所在行移至窗口顶端
zb #光标所在行移至窗口底端
/str #查找单词"str"
?str #反向查找单词"str"
#以上两个命令执行后可使用 n 或者 N 正向或反向查找下一个匹配的字符串
/str> #查找以"str"结尾的单词
/ * #取得当前光标上的单词,并向前查找匹配的字符串
# #取得当前光标上的单词,并反向查找匹配的字符串
`` #使用类似"G"这样的移动命令时,会有标记留下,本命令可以回到原来的地方
'' #功能同上
^O #跳到一个较老的地方
^I #跳到一个较新的地方
ma #在当前位置作标记,a可以是字母a~z
`a #跳到标记a处
'a #跳到标记a所在行的行首
:marks #列出所有标记
cw #删除一个词,切换至插入模式
cc #修改一整行
x #删除当前光标下的字符
dl #删除当前光标下的字符
X #删除当前光标前的字符
dh #删除当前光标前的字符
C #修改至行尾
c$ #修改至行尾
s #修改一个字符
cl #修改一个字符
S #修改一整行
cc #修改一整行
r #替换单个字符
. #重复最后一次的修改操作
d0 #删至行首
d$ #删至行尾
u #撤销
U #撤销一整行的修改
^u #删除输入方式下所输入的文本
J #把下一行合并到当前行尾
v #启动可视模式,选择文本
V #启动可视模式,按行选择文本
^V #启动可视模式,按区块选择文本
aw #可视模式下选择单词
iw #可视模式下选择单词(无空格)
as #可视模式下选择句子
is #可视模式下选择句子(无空格)
ap #可视模式下选择段落
ip #可视模式下选择段落(无空格)
o #可视模式下转到可视区域另一端
p #粘贴文本
P #与p类似,只是插入的方向相反
xp #交换两个字符,当前光标下以及下一个
ddp #上下两行调换
y #拷贝文本,常见组合命令:yw, ye, y$等
yy #拷贝一整行
Y #拷贝一整行,同上
"yy #拷贝当前行至剪贴板
"
p #从剪贴板粘贴
R #进入替换模式
~ #改变光标下字符的大小写
I #称到当前行的第一个非空字符并启动插入模式
A #移到行尾启动插入模式
daw 光标位于单词中间位置,使用本命令可以删除整个单词
dl #删除当前字符(与x命令功能相同)
d0 #删除到某一行的开始位置
d^ #删除到某一行的第一个字符位置(不包括空格或TAB字符)
dw #删除到某个单词的结尾位置
d3w #删除到第三个单词的结尾位置
db #删除到某个单词的开始位置
dW #删除到某个以空格作为分隔符的单词的结尾位置
dB #删除到某个以空格作为分隔符的单词的开始位置
d7B #删除到前面7个以空格作为分隔符的单词的开始位置
d) #删除到某个语句的结尾位置
d4) #删除到第四个语句的结尾位置
d( #删除到某个语句的开始位置
d} #删除到某个段落的结尾位置
d{ #删除到某个段落的开始位置
d7{ #删除到当前段落起始位置之前的第7个段落位置
dd #删除当前行
d/text #删除到文本中出现 text 所指定的位置前面
dfc #删除到文本中出现字符 c 的位置前面
dtc #删除当前行直到下一个字符“c”所出现位置之间的内容
D #删除到某一行的结尾
d$ #删除到某一行的结尾
5dd #删除从当前行所开始的5行内容
dL #删除直到屏幕上最后一行的内容
dH #删除直到屏幕上第一行的内容
dG #删除直到工作缓存区结尾的内容
d1G #删除直到工作缓存区开始的内容
dgg #删除直到工作缓存区开始的内容
qq010lDjq + 9999@q #保留每一行的前10个字符
:%s/^(.{10}).$/\1/g #保留每一行的前10个字符
:%s/^.{10}// #删除每一行前10个字符
:%s/^(.{9}).
$/\1/g #删除每一行前10个字符
:11,12m13 #移动11-12行(包括11,12)到13行之下
:11,12co13 #复制11-12行(包括11,12)到13行之下
:11,12d #删除11-12行(包括11,12)行
:.,$d #删除当前行到最后一行
:s/str1/str2/ #用字符串 str2 替换当前行中首次出现的字符串 str1
:s/str1/str2/g #用字符串 str2 替换当前行中所有出现的字符串 str1
:s/str1/str2/gi #用字符串 str2 替换当前行中所有出现的字符串 str1,在查找时不区分大小写
:%s#/usr/bin#/bin#g #把正文中所有 /usr/bin 换成 /bin,其中#是转义字符,表明其后的/字符是具有实际意义的字符,不再是分隔符
:.,$s/str1/str2/g #用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$s/str1/str2/g #用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g #用字符串 str2 替换正文中所有出现的字符串 str1
:%s/str1/str2/g #用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s/str2/str3/g #将所有包含 str1 的行里面的 str2 替换为 str3
:%s/str1/str2/gc #用字符串 str2 替换正文中所有出现的字符串 str1 并让用户确认
:10,20s/^/#/ #将第10行至第20行的最前面插入#
:%s/$/str/g #在整个文件每一行的行尾添加 str
:%s/:.//g #删除所有行从冒号开始直到行尾的所有部分
:%s/\s+$// #删除所有行尾空白
:%s/ $// #删除行尾空格
:g/(foo)(bar)/s/\2/\1baz/g #将foobar替换成foobaz
:s/[^]
$// #把最后一个包括这个后面的所有字符去掉
:0,$d #删除所有内容
ggdG #删除所有内容
%s/^M//g #删除dos换行,命令中的 ^M = Ctrl v + Ctrl m
:%s/%u3000//g #删除全角空格
:g/^(.
)$\n\1$/d #删除重复行
:g!/str/d #删除不含字符串 str 的行
:v/str/d #删除不含字符串 str 的行
:g/str1/,/str2/d #删除第一个含str1到第一个含str2之间的行
:v/./.,/./-1join #多个空行压缩为一个空行
:g/^$/,/./-j #多个空行压缩为一个空行
:g/^\s*$/d #删除所有空行,包括含空白字符的行
:g/^$/d #删除所有空行
:set ignorecase #忽略大小写
:w !sudo tee % #使用 root 权限保存,%表示当前编辑文件的文件路径

你可能感兴趣的:(vi常用命令)