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

Linux学习3:vi & vim

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

基本上 vi 共分为三种模式,分别是『一般模式』、『编辑模式』、『指令列命令模式』。简单的说,我们可以将这三个模式想成底下的图表来表示:51Testing软件测试网iCl.G\ x Nw

W/Lj9w`Q`0
} J&CL3V BV051Testing软件测试网6l%A:[/[Gqh
这三种模式的作用分别是:
.q7]7Zr'q)X0一般模式
%u7X+wy X`G V6r0
以 vi 打开一个档案就直接进入一般模式了(默认模式)。
6_Av/Y2HO6`k,zo0G0在这个模式中, 你可以使用『上下左右』按键来移动光标,使用『删除字符』和『删除整行』来处理档案内容, 使用『复制、粘贴』来处理你的文件数据。

,{3}k P Op0编辑模式51Testing软件测试网k|2q| r8zS
在一般模式中可以进行删除、复制、粘贴等的动作,但是却无法编辑文件内容! 要等到你按下『i, I, o, O, a, A, r, R』等任何一个字母后,才会进入编辑模式。51Testing软件测试网v%qt9N(J R K
注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现『 INSERT 或 REPLACE 』的字样,此时才可以进行编辑。
Y3]X)A&xE n+f~:AXT0而如果要回到一般模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。

%o#j2_r-WYWp'n8m9}0
  • 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 为止;(常用)
51Testing软件测试网&ya%e~x,LX,i

指令列命令模式51Testing软件测试网Rx.x WQTF0B
在一般模式当中,输入『 : / ? 』三个中的任何一个按钮,就可以将光标移动到最底下那一行。51Testing软件测试网GOz} d vS&t
在这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显示行号等的动作则是在此模式中达成的!51Testing软件测试网A9MF'WP6u

  • :w将编辑的数据写入硬盘档案中(常用)
  • :w!若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
  • :q离开 vi (常用)
  • :q!若曾修改过档案,又不想储存,使用 ! 为强制离开丌储存档案。注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
  • :wq储存后离开.强制性写入文件并退出。即使文件没有被修改也强制写入,并更新文件的修改时间.
    ,G1M8E$ET Tv a0:x写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。
    .w ZM%nJ R%Zv0这两者一般情况下没什么不一样,但是在编程方面,对编辑源文件可能会产生重要影响。因为文件即使没有修改,":wq"强制更新文件的修改时间,这样会让make编译整个项目时以为文件被修改过了,然后就得重新编译链接生成可执行文件。这可能会产生让人误解的后果,当然也产生了不必要的系统资源花销。51Testing软件测试网/W9^^,pp0M

    ND!^F7R$`j#@0

$Z/X}(O o k8Mqn0快速移动
.o.B'Rq;D0
1.上下左右移动:
X H%X*J*{*U!X#Y4FN0•可以使用四个方向键(不推荐)
"JM B%z`1`0•推荐使用j、k、l、h(熟练了以后是凭感觉)51Testing软件测试网'TV+}$HrI
•向下翻页:ctrl+f (forward)51Testing软件测试网"w!{wI? Bj ]0J9@
•向上翻页:ctrl+b (back)51Testing软件测试网(X v{n_
51Testing软件测试网(o/b LI8f|e*IT
2.文档内移动:
8dP)SE!dqFI I0•移动到文档的开始:gg
T6B7Txl5FfTY0•移动到文档的结尾:G51Testing软件测试网k-[(hFq3I+O
•移动到第n行:nG
9E-q:c-k0w3Ngh051Testing软件测试网 k7FVm xON
3.行内移动:51Testing软件测试网)uZk)Ugn b~
•移动到一行的开头:051Testing软件测试网:Cd#x VK&Q|
•移动到一行的结尾:$
2lJq]d:e0•移动到下一个单词的开头:w
b.[2~M5r]0•移动到上一个单词的开头:b
mMU;wX4? {*_051Testing软件测试网Un$M0H~jP:N \
复制、粘贴、删除51Testing软件测试网5O"M%P%s I_6E-|v
1.复制一行:yy51Testing软件测试网%Y3?u?'i] r5r?g
2.复制一个单词:yw
#{"p:uM L @1F6SW3H#Y03.复制从当前位置到行尾:y$
4Gt(fV#|$y04.复制n行:yny(5行以内好用,多了数起来就麻烦)51Testing软件测试网4tT#N+h n;tI,g
5.复制选择的很多行:先使用V进入visual 模式,然后j向下移动到你想复制的行为止,然后y
"s_-`-Yu!}&dP6x"_h06.所有的粘贴都是:p51Testing软件测试网 ~)L G%UvH S
7.删除:d(删除就是剪切,它会覆盖之前复制的内容)
f#u6Q$D8nX6CC08.删除一行:dd
7t5YA@V"EY09.......和复制的操作是类似的。51Testing软件测试网{2TU/K$V'e(D}
51Testing软件测试网Y,lT.h6y
块状编辑51Testing软件测试网4v$eHi]$\Y[
在编写程序的时候,非常有用。例如整块代码整体缩进,整体注释等Ctrl+v进入到块状模式,然后使用j、k、l、h来选择块状区域,然后
m r |-u!f N3~{!W01.d来删除,或者 2.I(大写的i)来进入插入模式,输入文本,然后按ESC,它就生效.

_8VIG$H051Testing软件测试网 ~:A8}"h Uf]4z(a:H2tP

撤销和恢复51Testing软件测试网BG%Y4o rOpF#|A+?
很喜欢Windows下面的Ctrl+z和Ctrl+y吧,在vim也有这个功能。只是命令不一样:51Testing软件测试网EK k1A/K4AO \
撤销:u
?b#Z7R-p9J/t0恢复:Ctrl + r51Testing软件测试网q-Es1FT r(M`v^
51Testing软件测试网[:a%P%LBa:J*R eM
查找和替换
.M+BF#T_)eC0
last line mode:在命令模式下面,输入“:”,然后,再在后面输入命令
q-P8{J D^#V0查找::/<你要查找的字符串>,找到一个后,按n或者N来向前或者向后查找下一个
$i\ I~$[)P6}~a0查找并替换::%s/<准备替换的字符串>/<替换后的字符串>/g51Testing软件测试网 RZfzu2bw
查找替换要求确认::%s/<准备替换的字符串>/<替换后的字符串>/c

,qEZVp&om;w051Testing软件测试网]1TmvWdG*h

小技巧51Testing软件测试网"cz jJ/Z3g
51Testing软件测试网ZxXb9a6y

{L/C cS2H,Ky0重复上次的命令:.

-f4EC o L051Testing软件测试网?#K ]+B|

括号匹配(写代码的时候非常有用):%51Testing软件测试网R,g"[5],Z5Hj

)Y6KN7^8b&E[Q@0查找当前光标所在位置的单词:#

uQ$t1s{c051Testing软件测试网 mBLQFB5MA$h.~

开两个窗口:ctrl+w, 然后按v,按ctrl+w来切换

0Q cP7Vc PCf0

W4rK b2Xp@%|0设置行号/不要行号::set number / :set nonumber

8S oD'A"jU$Rx(W)mk051Testing软件测试网Q+gHNM`0}z&J)M

一个Tab自动转换成4个空格:51Testing软件测试网'Y/X+g clm@}+IVi
:set ts=4
$OQkQ,M"fj0:set expandtab
xcfJ,D{hN051Testing软件测试网U{le0j#O |_j[T
在命令前面加上一个数字n,表示执行n次:5dd(效果和d5d一样的)
:? m(h7en0wu0查看不可打印字符::set list(Tab和空格屏幕打印是没区别的,加上它就有区别了)51Testing软件测试网V P6SzMp
51Testing软件测试网XLKOT6Z-WP(a#P#F
参考51Testing软件测试网 up&L7PU[8V'?0D

  • 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