已转开发,博客新地址:http://welcomezhang.iteye.com/

Linux学习3:vi & vim

上一篇 / 下一篇  2011-08-06 13:27:32 / 个人分类:Linux

基本上 vi 共分为三种模式,分别是『一般模式』、『编辑模式』、『指令列命令模式』。简单的说,我们可以将这三个模式想成底下的图表来表示:
0l$~'q*A9vL,]0
!s V3mb jYr G0
0S$n?6u O-[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%T2OZA(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软件测试网a ERO U kC4l7N&_;__
•向下翻页:ctrl+f (forward)51Testing软件测试网qq/uoyv,j
•向上翻页:ctrl+b (back)
+K-y:xBpnu0
!V6_'I4Y gqO L+q02.文档内移动:51Testing软件测试网1j8I/B\;vL
•移动到文档的开始:gg
[i?(wZi!B G0•移动到文档的结尾:G51Testing软件测试网4@ ~Sb UoS[
•移动到第n行:nG
PB&x L#@,m7V8h0
L G |%~r*l!o)I z5G03.行内移动:
C8B~6g BfMZEr+s0•移动到一行的开头:0
6mj9S@?0•移动到一行的结尾:$
`3p5?1L)q&KlF:c|:|0•移动到下一个单词的开头:w51Testing软件测试网,O)Q@-C a(H%w
•移动到上一个单词的开头:b51Testing软件测试网,K;xG._Jw5k?j
51Testing软件测试网YkG*MP3iG
复制、粘贴、删除
p,p'T l h B3so'f` z0
1.复制一行: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
D BK:wT-H07.删除:d(删除就是剪切,它会覆盖之前复制的内容)
^7E$Q3F f:ziw*q08.删除一行:dd
:O7asu0R7p%Y~8^C09.......和复制的操作是类似的。
:yZs TA|0
#YwfX I!eE0块状编辑
h[vf#syUE0
在编写程序的时候,非常有用。例如整块代码整体缩进,整体注释等Ctrl+v进入到块状模式,然后使用j、k、l、h来选择块状区域,然后
P"z@p,[5l3~m.I01.d来删除,或者 2.I(大写的i)来进入插入模式,输入文本,然后按ESC,它就生效.

e o.KZQU-KP0

M5g: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[]jQ0
last 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括号匹配(写代码的时候非常有用):%

d2HRc3c Y.L0

DS8nYl qB0a0查找当前光标所在位置的单词:#

1ULq'k$|~v051Testing软件测试网2u,q I5wm6uUk

开两个窗口:ctrl+w, 然后按v,按ctrl+w来切换51Testing软件测试网?2[.X m I*^ r0oM)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

.R5S lU2iE2L$@0参考51Testing软件测试网"l}9G/GE6v

  • Vim实践

  • TAG: Linux vi VI VIM vim

    kathy_Gong的个人空间 引用 删除 kathy_Gong   /   2011-09-18 21:15:53
    很好,分享下
    RJHWJ的个人空间 引用 删除 RJHWJ   /   2011-09-06 19:12:06
    5
    h393133940的个人空间 引用 删除 h393133940   /   2011-08-14 09:48:59
    5
     

    评分:0

    我来说两句

    Open Toolbar