基本上 vi
共分为三种模式,分别是『一般模式』、『编辑模式』、『指令列命令模式』。简单的说,我们可以将这三个模式想成底下的图表来表示:
0l$~'q*A9vL,]0!sV3mb jYrG00S$n?6uO-[sH051Testing软件测试网O1[&yb1Y'h(H这三种模式的作用分别是:
&p@%x%UR:|0一般模式51Testing软件测试网,|Jr|`y
N+k
以 vi
打开一个档案就直接进入一般模式了(默认模式)。
b.S/w
i~a0在这个模式中, 你可以使用『上下左右』按键来移动光标,使用『删除字符』和『删除整行』来处理档案内容,
使用『复制、粘贴』来处理你的文件数据。
6~B1p)LK9S]0编辑模式51Testing软件测试网^3WD2d,kf
在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容! 要等到你按下『i, I, o,
O, a, A, r, R』等任何一个字母后,才会进入编辑模式。
6f8nr9?G}^0注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现『 INSERT 或
REPLACE 』的字样,此时才可以进行编辑。
%hJH+D k+g0而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。
vs8a5xE&tSV!q0- i, I进入插入模式(Insert mode:insert): i 为『从目前光标所在处插入』, I
为『在目前所在行的第一个非空格符处开始插入』。 (常用)
- a, A进入插入模式(Insert mode:append):a 为『从目前光标所在的下一个字符处开始插入』, A
为『从光标所在行的最后一个字符处开始插入』。(常用)
- o, O进入插入模式(Insert mode:open): o 为『在目前光标所在的下一行处插入新的一行』; O
为在目前光标所在处的上一行插入新的一行!(常用)
- r, R进入取代模式(Replace mode): r
只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
I
FoQ#dE4cse1W
mK0指令列命令模式
Y.^i"mAi#Q
n)e0在一般模式当中,输入『 : / ?
』三个中的任何一个按钮,就可以将光标移动到最底下那一行。
4r\5O-~!k|8~Jp;l0在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi
、显示行号等的动作则是在此模式中达成的!51Testing软件测试网#|y.K8L$U)T6M
- :w将编辑的数据写入硬盘档案中(常用)
- :w!若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
- :q离开 vi (常用)
- :q!若曾修改过档案,又不想储存,使用 ! 为强制离开丌储存档案。注意一下啊,那个惊叹号 (!) 在 vi
当中,常常具有『强制』的意思~
- :wq储存后离开.强制性写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间.
M%T2OZ A(f~VU&H0:x写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。51Testing软件测试网 LI:O K#BRlD
i
这两者一般情况下没什么不一样,但是在编程方面,对编辑源文件可能会产生重要影响。因为文件即使没有修改,":wq"强制更新文件的修改时间,这样会让make编译整个项目时以为文件被修改过了,然后就得重新编译链接生成可执行文件。这可能会产生让人误解的后果,当然也产生了不必要的系统资源花销。51Testing软件测试网-Q$S8pbh
d
$H0jYELY0
51Testing软件测试网U
`p)G"~&Uqf快速移动51Testing软件测试网:Q4wn
pj H$s,g
1.上下左右移动:51Testing软件测试网K[+Gc,jU
•可以使用四个方向键(不推荐)51Testing软件测试网.\c)zP#et
•推荐使用j、k、l、h(熟练了以后是凭感觉)51Testing软件测试网aERO UkC4l7N&_;__
•向下翻页:ctrl+f (forward)51Testing软件测试网qq/uoyv,j
•向上翻页:ctrl+b (back)
+K-y:xBpnu0
!V6_'I4Y gqO L+q02.文档内移动:51Testing软件测试网1j8I/B\;vL
•移动到文档的开始:gg
[ i?(wZ i!BG0•移动到文档的结尾:G51Testing软件测试网4@ ~Sb
UoS[
•移动到第n行:nG
PB&xL#@,m7V8h0
L G |%~r*l!o)I
z5G03.行内移动:
C8B~6gBf MZEr+s0•移动到一行的开头:0
6mj9S@?0•移动到一行的结尾:$
`3p5?1L)q&KlF:c|:|0•移动到下一个单词的开头:w51Testing软件测试网,O)Q@-Ca(H%w
•移动到上一个单词的开头:b51Testing软件测试网,K;xG._Jw5k?j
51Testing软件测试网YkG*MP3iG
复制、粘贴、删除
p,p'T
lh B3so'f`
z01.复制一行:yy
e*E|+G+Lc02.复制一个单词:yw
1t-d6b7P'P4gcHdf
p03.复制从当前位置到行尾:y$
$t$u
O"Re/|04.复制n行:yny(5行以内好用,多了数起来就麻烦)
F?zHa,P05.复制选择的很多行:先使用V进入visual
模式,然后j向下移动到你想复制的行为止,然后y
j^S&Uh06.所有的粘贴都是:p
DBK:wT-H07.删除:d(删除就是剪切,它会覆盖之前复制的内容)
^7E$Q3Ff:ziw*q08.删除一行:dd
:O7asu0R7p%Y~8^C09.......和复制的操作是类似的。
:yZsTA|0
#YwfX
I!eE0块状编辑
h[vf#s yUE0在编写程序的时候,非常有用。例如整块代码整体缩进,整体注释等Ctrl+v进入到块状模式,然后使用j、k、l、h来选择块状区域,然后
P"z@p,[5l3~m.I01.d来删除,或者
2.I(大写的i)来进入插入模式,输入文本,然后按ESC,它就生效.
eo.KZQU-KP0M5g:g/u[s0撤销和恢复51Testing软件测试网`I5H!b2?f
很喜欢Windows下面的Ctrl+z和Ctrl+y吧,在vim也有这个功能。只是命令不一样:51Testing软件测试网$@p+K9NWL
撤销:u51Testing软件测试网7E
y
NF^\pP
恢复:Ctrl
+ r51Testing软件测试网N1h)a*SL
DG
51Testing软件测试网&\/};_'Fz[^
查找和替换
GEs;eO []jQ0last line
mode:在命令模式下面,输入“:”,然后,再在后面输入命令51Testing软件测试网
\-i]*o(y%[
查找::/<你要查找的字符串>,找到一个后,按n或者N来向前或者向后查找下一个51Testing软件测试网8S~6MtS7K6aT;d
查找并替换::%s/<准备替换的字符串>/<替换后的字符串>/g51Testing软件测试网DJ9WoI
查找替换要求确认::%s/<准备替换的字符串>/<替换后的字符串>/c51Testing软件测试网b?:^#yWUQ0lkw
51Testing软件测试网PQ/AMzrR8[小技巧
5X1x)j/g#Z"V0
-]:TXD`/O051Testing软件测试网5~&mg;i&_-u0s(?5I7g2J重复上次的命令:.51Testing软件测试网'_nM8cC
4Y+~l#x9L,eXm0括号匹配(写代码的时候非常有用):%
d2HRc3cY.L0DS8nYl
qB0a0查找当前光标所在位置的单词:#
1ULq'k$|~v051Testing软件测试网2u,q
I5wm6u Uk开两个窗口:ctrl+w, 然后按v,按ctrl+w来切换51Testing软件测试网?2[.X
m
I*^ r0o M)A
51Testing软件测试网P,EQ9`R6}a设置行号/不要行号::set number / :set nonumber51Testing软件测试网'Y
vDZr f
51Testing软件测试网cD
Maz;L!?一个Tab自动转换成4个空格:
b
|@9fCL0:set ts=451Testing软件测试网 K qD2~8BsC
g
:set expandtab51Testing软件测试网
}4D/m^d!v,u#d?&Qv
5~1dZU/k#D p,u`0在命令前面加上一个数字n,表示执行n次:5dd(效果和d5d一样的)51Testing软件测试网6e'F)KO M?6F
查看不可打印字符::set
list(Tab和空格屏幕打印是没区别的,加上它就有区别了)51Testing软件测试网Nc)Qz`j8Jp a
.R5SlU2i E2L$@0参考51Testing软件测试网"l}9G/GE6v
Vim实践