1.vim的使用模式
vim具有三种使用模式,初始模式为一般命令模式,然后可以通过按键进入编辑模式和命令行模式。
(1)一般命令模式(command mode)
在一般命令模式下,我们只能使用【上下左右】等按键进行文件的【查看】、【删除字符】、【删除整行】、以及行与字符的【复制粘贴】功能。

(2)编辑模式(insert mode)
通过使用按键【i I a A o O r R】可以进入编辑模式,在编辑模式中,可以对文件的内容进行更改。要返回一般命令行模式,按下Esc键。

(3)命令行模式(command-line mode)
在vim一般命令行模式,使用按键【: / ?】可以进入命令行模式,在该模式中,可以使用【查找数据】,【进入多界面窗口】,【读取、保存、批量替换字符】【退出vi】【显示行号】等命令。

总之三种模式的关系可以用下图来表示,重点是编辑模式与命令行之间的转换必须要回到一般模式后,才能转换

2.vim的使用
命令格式:vim 文件名 文件名(vim可以同时打开多个文件,具体的在之后的多文件编辑中详细学习)
例如:vim /tmp/hosts /usr/hosts
(1)常用按键说明
①光标的移动
方向键←(h):光标左移
方向键↑(j):光标上移
方向键↓(k):光标下移
方向键→(l):光标右移
(可以配合数字来实现光标在多个字符间的移动,比如输入30→就可以让光标往右走30个字符)
pageup(ctrl+b):屏幕向上移动一页
pagedn(ctrl+f):屏幕向下移动一页
n+space:输入数字n后空格,表示光标向右移动n个字符
home键(0):光标往这一行的最右边移动
end键($):光标往最左边移动
G:移动到文件的最后一行
nG:输入数字n后再按G,前往第n行(例如10G,前往第10行)
gg:移动到文件的第一行
n+回车:光标下移n行
H:光标移动到屏幕最上方的那一行的第一个字符
M:光标移动到屏幕中央那一行的第一个字符
L:光标移动到屏幕最下方的那一行的第一个字符
②查找与替换
查找:
/word:向光标之下查找word这个字符串
?word:向光标之上查找
n/N:向下/上查找下一个字符串
替换:
:n1,n2s/word1/word2/g(c):在n1行与n2行之间查找word1并替换成word2,g后加入c参数后,会在替换前向用户确认(confirm)是否替换(例如::23,49s/man/MAN/gc,将23与49行之间的man替换成MAN)
:1,$s/word1/word2/gc:从第一开始到最后一行,寻找word1并替换成word2
③删除、复制、粘贴与合并撤销
删除:
x与X:向后/前删除一个字符
nx:n为数字,代表向后连续删除n个字符
dd:删除(剪切)光标所在的那一行
ndd:删除(剪切)光标所在的那一行向下的n行
d1G:删除光标所在行到文件的第一行的数据
dG:删除光标所在行到文件的最后一行的数据
复制:
yy:复制光标所在的那一行
nyy:复制光标所在的那一行起往下n行的数据
y1G:复制光标所在的那一行到文件第一行的数据
yG:同上,到最后一行
粘贴:
p(小写):将复制(剪切)的数据在光标所在的那一行的下一行粘贴(假设复制10行的数据,光标在第20行,则从21行开始复制,到30行)
P(大写):在光标所在的上一行粘贴(复制10行的数据,光标在20行,则复制后光标变成第30行)
合并:
J:将光标行和下一行合并成一整行
撤销及重复操作:
u:撤销一步,恢复前一个操作
ctrl+r:重复上一个操作(重做一次)
.:小数点“.“,也是重复前一个操作
(2)一般模式进入编辑模式的常用按键
①插入模式
i与I:i是【从当前光标处插入】,I是【从光标所在 ` 321·1、】【90 ;8咯iu652·12 345 89 =0的第一个非空格符处开始插入,一般开头没空格的话,就是从第一个字符那里插入】
a与A:a是【从当前光标处的下一个字符开始插入】,A是【从光标所在行的最后一个字符开始插入】
o与O:o是【在当前光标处的下一行插入新的一行】,O是【是在当前光标处的上一行插入新的一行】
②替换模式
r与R:r是【替换一次当前光标处的字符】,R是【一直替换光标所在处的字符,直到按下Esc退出】
(3)命令行模式常用按键
Vim环境修改:
:set nu :显示行号
:set nonu :不显示行号
保存、退出命令:
:w :写入数据(相当于保存)
:w filename :相当于另存为(例如:w /tmp/host_new 则为将当前文件另存为host_new文件)
:r filename:在当前编辑的文件的光标所在处的后边插入filename文件的内容
:n1,n2 w filename:将n1行到n2行的内容保存为filename这个文件
:q :离开
:wq :写入数据后离开
:! :!表示强制执行命令的意思
:w! :强制写入
:q! :不保存,强制离开
ZZ:大写的Z,若文件没修改则直接退出,若修改了则保存后再退出
:! command:暂时中止vim编辑器,执行command命令(例如:! ls -al /tmp,则为暂时中止vim编辑器,执行ls命令)
3.vim的缓存以及故障恢复
vim和word等软件一样,在进行内容修改时,都会在文件的当前目录下生成一个名为.filename.swp的缓存文件,该缓存文件在用户保存并关闭文档后就会写入数据并消失。但是当vim因为某些原因(1.多人同时编辑一个文档 2.不正常关闭vim)不正常中断时,就可以利用该缓存文件进行数据的恢复。

当重新打开该文件时,会弹出错误修复框,此时系统会提供几个选项给我们进行选择。

选项:
o:只是查看文件而不修改文件内容时输入这个
E:不需要恢复文件而直接编辑时输入这个
R:想要恢复文件时输入R,系统会从.swp文件里恢复数据,但是事后需要手动删除.swp文件
D:当确认不需要恢复文件时,可以输入D删除缓存文件
Q:直接退出
4.vim可视区块
上边的学习中,我们基本上都是以行为单位的操作,那如果我们想以列为单位来操作呢?
例如我想把下边的192.168.1.1的三行复制到第一行host1.class.net 的右边,我该怎么操作?

这时我们就要引入可视区块这个功能,那么啥是可视区块呢?这里我们使用windows里的一个例子就可以很好的理解了

linux中也是一样,通过选择一个区块范围来达成我们的目的
可视区块常用按键:
v:字符选择,光标经过的字符会留白
V:行选择,以行为单位

ctrl+v:可视区块模式,可以使用矩形的方式来进行数据选择

y:复制反白的区块
d:删除反白的区块
p:粘贴刚刚复制的区块
所以我们这就很好解决了,只要用v把192.168.1.1这三行选中,再复制过去就好

5.多文件编辑
vim支持同时编辑多个文件,使用命令:vim 文件名 文件名 就能打开多个文件
例如:vim /etc/man_db.conf /tmp/man.conf

常用命令:
:n :切换下一个文件
:N :切换上一个文件
:files :查看vim当前开启的文件
6.多窗口编辑
vim中也支持多个文件多个窗口的编辑功能

常用命令:
:sp {filename}:以多窗口的功能开启一个新文件,filename可以提供也可以不提供,不提供就默认开启新文件
ctrl+w(松开后)+↑(j)↓(k)键 :进行窗口间的切换
ctrl+w(松开后)+q或:q或:close:关闭窗口
7.vim命令补全功能
vim本身也有命令补全的功能,具体的命令补全方式有三种。
(1)补全当前文档中重复过的关键词
ctrl+x → +n(先ctrl+x进入模式后,再按字母n)

(2)以文件的扩展名为语法补充,以vim内置的关键词,补全语法命令
常用于编程过程中的某些命令的补齐,不过前提是文件的扩展名要正确,例如CSS文件的后缀名.php或.html。
ctrl+x → ctrl+o
(3)以当前目录内的【文件名】,进行补齐
ctrl+x → ctrl+f
8.vim环境设置
vim可以根据个人的喜欢设置初始的环境,比如是否自动缩进?是否显示行号?等。
我们本身在vim里所进行的操作,会保存在~/.viminfo这个文件里(自动生成)。
而如果我们想自己创建一个初始默认值,则可以手动建立~/.vimrc这个文件,然后在这个文件里输入我们想要的参数值。

常用的环境参数:
(1)行号
:set nu:设置行号
:set nonu:不设置行号
(2)高亮度查找
:set hlserch:查找的关键词高亮显示
:set nohlserch
(3)自动保存备份文件
:set backup:默认不backup
(4)设置状态栏
:set ruler:显示右下角状态栏
(5)设置退格键
:set backspace(0 1 2 ):一般进入编辑模式后,就可以通过backspace键删除任意值,但一些linux发行版不允许这样,所以可以通过这个参数值进行设置,0 1 代表仅能删除刚输入的字符,2 代表可以自由删除
(6)设置注释的颜色
:set bg=dark
:set bg=light(默认)
(7)设置根据语法的不同显示不同的颜色
:syntax on
:syntax off
(8)查看参数值的设置
:set all:显示当前所有环境参数设置值
:set :显示当前与系统默认参数不同的参数值(你变动过的参数值)
9.vim常用命令示意图

Comments NOTHING