vi是linux程序员必须掌握的编辑器,它的功能很强大,但是也很难掌握。那么多的命令谁记得过来,:-)。
Vi工作有三种模式:命令模式、文本输入模式和末行模式。用Vi打开一个文件后,处于命令模式。利用文本插入命令,如i,a,o等可以进入输入模式,用[Esc]键可以从输入模式退回命令模式。在命令模式中按“:”键可以进入到末行模式,当执行完命令或按[Esc]键可以回到命令模式。
我把我用过的命令罗列在下边,以备查用。
移动:
0(zero) 到行首
$ 到行尾
gg 到页首
G 到页末
:行号 跳转到指定行
^ 移动到该行第一个非空格的字符处
fx 向右跳到本行字符x处(x可以是任何字符)
Fx 向左跳到本行字符x处(x可以是任何字符)
tx 和fx相同,区别是跳到字符x前
Tx 和Fx相同,区别是跳到字符x后
退出:
ZZ:退出vi并保存
:q! :退出vi,不保存
:wq :退出vi并保存
set xxx:设置XXX选项。
:set nu
:set nonu
:set hlsearch 设置高亮
:set nohlsearch 关闭高亮
删除:
x: 删除当前光标下的字符
dw:删除光标之后的单词剩余部分。
d$:删除光标之后的该行剩余部分。
dd:删除当前行。
:n1,n2d :删除n1-n2行
c(w或$):功能和d相同,区别在于完成删除操作后进入INSERT MODE
cc:也是删除当前行,然后进入INSERT MODE
更改字符:
rx:将当前光标下的字符更改为x(x为任意字符)
~: 更改当前光标下的字符的大小写
查找:
/字符串:即可在当前文件查找相应的字符串。
继续查找同一个字符串,按n或/(ENTER)
若要逆向查找,用?代替 /
.*[]^%~$ 在Vi中具有特殊含义,若需要查找则应该加上转义字符"\"
% :查找配对的括号。
替换:
:%s#old#new#g
:%s/old/new/g:替换old为new,若没有g则表示只替换一个。
若要每个替换都向用户询问则应该用gc选项
剪切/复制/粘贴:
yy 复制光标所在行
nyy 复制光标所在行开始的向下n行
yw 将当前光标所在的单词复制到内在缓冲区。6yw命令将把当前单词和它后面的5个(共6个)单词复制到内存
dw删除当前的单词,并将它放到与yw命令使用的相同的内存缓冲区。可以使用p命令将单词粘贴到文件的其他地方
yt#复制从光标到该字符前一个字符(不包括该字符)之间的文本。例如,ytB命令将从光标到字符B之间的字符(不包括字符B)复制到内存
yf#复制从光标到该字符(包括该字符)之间的文本。例如,yfm命令将从光标到字符m(包括字符m)之间的字符复制到内存
yT#复制从光标到该字符前一个字符(不包括该字符)之间的文本。例如,ytB命令将从光标到字符B之间的字符(不包括字符B)复制到内存
yF#复制从光标到该字符(包括该字符)之间的文本。例如,yfm命令将从光标到字符m(包括字符m)之间的字符复制到内存
yt,yf从光标处向后找,yT,yF从光标处向前找。
p 将缓冲区内的字符粘帖到光标所在位置(与yy搭配)
当前行与下一行换位置:ddp
当前字与后面的字换位置:xp
文件移动命令
J 将下行文本同当前行合并成一行
:#,# move # 将指定的行移到目标位置。:12,36 move 88命令将第12~36行之间的所有文本移到第68行的后面。move可缩写为mo
:1,66 co 88 将第1~66行之间的所有文本复制到第88行的后面
对代码自动格式化:
gg=G
用vi命令同时打开两个文件file1和file2,水平分割放置;在file1文件中查找包含test字符的行;copy 有test字符的一行到file2的末尾;保存退出。
命令如下:
vi –o file1 file2 #水平分割打开两个文件 (大O垂直分割)
/test #在file1文件中查找test字符串,可以在命令模式或末行模式执行
光标移动到test行,用V命令选中该行,用yy命令复制该行到缓冲区
用ctrl-w,ctrl-w(2次)命令进行窗口切换,切到file2文件中 光标定位到文件末尾,用p命令进行粘贴。
:wq #保存退出
windows文件的换行符^M在vi编辑器里输入:先按ctrl+v然后按ctrl+m,删除可用全局替换:%s/^M//g。
阅读(1574) | 评论(0) | 转发(0) |