vim 下的常用命令

系统管理员癿重要工作就是得要修改不设定某些重要软件的配置文件,因此至少得要学会一种以上癿文字接口的文书编辑器。 在所有的Linux distributions 上央都会有的一套文书编辑器就是 vi ,而且很多软件默讣也是使用 vi 做为他们编辑的接口, 因此鸟哥建议您务必要学会使用 vi 这个正规的文书编辑器。此外,vim 是进阶版的 vi , vim 不但可以用丌同颜色显示文字内容,还能够进行诸如 shell script, C program 等程序编辑功能, 你可以将 vim 规为一种程序编辑器! – from 鸟哥

以前学习linux的时候,就是只用那些常用的命令,完全没有体会到vim的好处,现在想整个系统的学下。因为命令很多,记录如下,主要是便于回头查找。也分享给大家。我看的是《鸟哥的私房菜这本书》,讲的不能再好了。我分享的书里面有这个电子书。但是还是建议买一个正版的。

vi 一共分为三种模式:一般模式,编辑模式,指令命令模式。

一般模式:以vi打开一个文件的时候,默认就是进入这个模式。这个模式中,可以使用上下左右按键移动光标,可以删除,复制,粘贴。

编辑模式:一般模式中可以进行复制,粘贴,删除,移动。但是没有办法编辑文件。这个时候,我们要通过[i,I,o,O,r,R]这些字母进入编辑模式。你会在下面看到[insert][replace]的字样,退出这个模式,请使用[esc]。

指令行命令模式:输入[:/?]三个中的任意一个,就可以移动到光标最底下一行。可以搜索,而读取,存盘,大量取代字符,离开vi,显示行号,这些都是这个模式达成的。

最常用的是:i,esc,a,:wq,:q!,vi filename….等等。


vim切换模式


一般模式

光标移动

h:(←) 光标向左边移动一个字符
j:(↓) 光标向下边移动一个字符
k:(↑) 光标向上边移动一个字符
l:(→) 光标向右边移动一个字符

hjkl是在键盘上连在一起的,30j,30h都可以。

ctrl+f : 屏幕向下移动一页 == pagedown
ctrl+b : 屏幕向上移动一页 == pageup

还有不是很常用的

ctrl+d : 屏幕向下移动半页
ctrl+u: 屏幕向上移动半页
+ 光标移动到非空格的下一列
- 光标移动到非空格的上一列

n<space> : 如 20(空格) 表示光标向右移动这一行的n个字符。

0 == [home]
$ == [end]

G 移动到此文件最后一行
gg 移动到这个档案的第一行
nG n表示数字,移动到这个档案的第n行
1G 自然代表移动到这个档案的第一行 == gg
n<enter> n表示数字,光标向下移动n行


搜寻与取代

/word 向光标之下寻找一个名称为word的字符串/seven 向下寻找seven这个字符串
?word 向光标之上寻找一个名称伪word的字符串

n 注意这里的n代表的不是数字,是n英文按键,代表[重复前一个搜寻的动作]
比如上面我/seven了,表示我要向下搜寻seven这个字符串,如果我此时按下n,代表继续向下搜寻下一个字符串。如果是?seven,同样的道理喽。

N 这个N是英文按键。与n刚好相反,比如刚才先按下/seven,再按下N,代表,会向上搜寻seven,此时作用等同于?seven

/?n 的配合,可以重复的找到一些你搜寻的关键字。

:n1,n2s/word1/word2/g n1,n2为数字,word1,查询字符串,word2为替换字符串
:100,200s/seven/Seven/g

:1,$s/word1/word2/g 从第一行到最后一行寻找word1,并且替换成word2.

:1,$s/word1/word2/gc 从第一行到最后一行寻找word1,并且取代为word2,并且在替换前提示用户,confirm一下,是否替换。


删除,复制,粘贴

x,X : x向后删除一个字符,X向前删除一个字符。x=del,X=backspace
nx : n为数字,连续向后删除n个字符。10x,向后删除10个字符
dd : 删除游标所在的那一列
ndd : 向下删除n列。
d1G : 删除光标所在到第一行的所有数据
dG: 删除光标所在到最后一行的所有数据

如果只删除一个字符,我倒觉得del,和backspace比较方便,因为不用从编辑模式,切换到命令模式。但是后面的dd,ndd,d1G,dG的好处就很明显体现出来了。

d$ : 删除游标所在处,到该行的最后一个字符
d0 : 删除光标所在处,到该行的第一个字符

yy : 复制游标所在的那一行
nyy : n为数字,复制光标所在的向下n行,20yy,向下复制20列

y1G : 复制光标所在列到第一列的所有数据
yG : 复制光标所在列到最后一列的所有数据
y0 : 复制光标所在的那个字符到该行行首的所有数据
y$ : 复制光标所在的哪个字符到该行行尾的所有数据

p,P : p将已经复制的数据在光标下一行粘贴,P为上一行。
J : 将光标所在列与下一列的数据合成同一列
c : 重复删除多个数据,例如向下删除10行 10cj

u : 复原前一个动作 == windows下面的ctrl+z
ctrl+r : 重做前一个动作 == windows下面的ctrl+y

这两个很常用。

. : 重复前一个动作,比如重复删除,重复粘贴,就一直按下小数点就行啦。


一般模式切换到编辑模式

i,I : 插入模式,i为从光标所在处插入,I为在目前所在行的第一个非空格处插入
a,A : a为从光标所在的下一个字符开始插入,A为从光标所在行的最后一个字符插入
o,O : o为在光标所在行的下一行插入,O为上一行插入。
r,R : 前面三个都是插入模式,这个是取代模式:r会取代光标所在的哪个字符一次,R会一直取代光标所在的文字,一直到esc

esc : 退出编辑模式,回到一般模式

上面那些按键,都会在左下角出现insert或者replace的字样


一般模式切换到指令模式

:w 将编辑癿数据写入硬盘档案中(常用)
:W 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的案权限有关
:q 离开 vi (常用)
:q! 若曾修改过档案,又不储存,使用 ! 为强制离开当前文件。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
:wq 存储后离开,:wq!存储后强制离开
ZZ 若文档没有更改,则不存储离开,若改动,则存储离开
:w [filename] 另存为另一个filenane
:r [filename] 将filename这个档案的内容加到游标的行后面

:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令列模式下执行 command 癿显示结果!例如『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出癿档案信息!

:set nu 显示行号
:set nonu 不显示行号


多窗口功能

如果想要对比一个文件或者多个文件的数据的时候,是否需要ctrl+f或者ctrl+b前后查看数据呢?不需要,vim支持多窗口功能,也就是窗口的分割

比如 vi 1.txt -> 1G -> :sp -> G两个同样的文件,一个文件开头,一个文件结尾,可以一起看。

比如再输入[:sp /etc/hosts]又会多了一个窗口了。

:sp [filename] 开启一个新窗口
ctrl+w+j ([ctrl]+w+↓) 按键的按法是:先按下 [ctrl] 丌放, 再按下 w 后放开所有癿按键,然后再按下 j (戒向下箭央键),则光标可移劢到下方的窗口。

[ctrl]+w+k ([ctrl]+w+↑): 同上,丌过光标移劢到上面的窗口。

[ctrl]+w+q 其实就是 :q 结束离开啦! 丼例来说,如果我想要结束下方癿窗口,那么利用
[ctrl]+w+↓ 移劢到下方窗口后,按下 :q 即可离开, 也可以按下[ctrl]+w+q


总结

下面的图片来自鸟哥的书。有时候模糊不清,会看的更认真是不是?=。=

vim切换简略图