1、vim 介绍
在之前的章节当中,我们多次用到 vi 命令,vim 和 vi 实际上是一样的命令,用法相同。
下面介绍一下 vim,
举例子,使用命令 vi /etc/passwd ,回车,看到的内容都是黑白的,没有颜色。
直接输入“:q”,回车,就可以退出上图界面。
使用 vim 命令查看会显示颜色,不过,在这之前需要先安装一下 vim ,输入命令 yum install -y vim-enhanced ,回车,即可安装。
安装完成之后,输入命令 vim /etc/passwd,回车,进入下图,
可以看到,颜色非常明显。这边要注意一下,千万不要编辑这个文件,不要改动内容。改动之后,系统启动都会受到影响,因为这个文件是一个用户文件,很关键的。
vim 分三种模式:
一般模式,就是还没有进入编辑模式之前,可以做一些操作;
编辑模式,按字母“i”即可进入编辑;
命令模式,可以搜索,可以进行查找替换,包括保存退出。
2、vim 颜色显示和移动光标
上面使用命令 vim /etc/passwd ,可以看到带颜色的内容。现在将文件 passwd 从目录 /etc 下移动到目录 /tmp 下,再使用命令查看,见下图,
可以看出颜色没有了,这说明相同的文件在不同的目录下,有可能导致颜色不存在。在 Cent OS 里,/etc 下面的文件往往是配置文件,在 /etc 下面就会显示颜色,放在其他目录下面就不会显示颜色了。接着输入命令 vim /etc/fstab ,回车,选择只读方式打开,也可以看到颜色,见下图,
同样的,给文件 fstab 挪一个地方,输入命令 cp /etc/fstab /tmp/ ,回车,然后输入命令 vim /tmp/fstab ,回车,显示的界面跟上图一样,是带有颜色的。这是因为文件 fstab 前面有以“#”开头的行。
接下来做一个实验,把 /tmp 下的 passwd 文件做一个变更,将光标定位到第一行,然后 Shift + o ,光标就会再往上一行,并且进入编辑模式,见下图,
此时,在上面输入#,后面随便加点内容进去,书写两行,见下图,
保存后退出,再使用命令 vim /tmp/passwd 进入,见下图,
可以看到,也有颜色,但是只在一二行出现,在中间也使用#开头编辑内容,也会看到颜色,见下图,
以上表示,这个文件本身并不是没有颜色,只不过文件内容本身不具备显示颜色的条件。接着做实验,输入命令 mv /tmp/passwd /tmp/passwd.sh ,给文件改一下名称,然后输入命令 vim /tmp/passwd.sh ,见下图,
可以看到,现在也有颜色了,说明颜色显示不仅和第一行的内容有关系,还和文件的名称有关系。
总之,vim 显示颜色的条件有很多,而且最终的结果也不太一样。这个不用太纠结。vim 在编辑文件的时候,是会显示颜色的,而且颜色往往和文件本身的内容和文件名有关系。
vim 有自己的配置文件,在 /etc/vimrc 下,输入命令 vim /etc/vimrc ,回车,见下图,
里面就是一些控制 vim 用法的内容,比较复杂,作个了解就可以了。
在自己用户的家目录下,可以编辑 vimrc 这个文件,输入命令 vim /root/.vimrc. ,回车,见下图,
默认这个文件是不存在的,当我们遇到 vim 一些比较高级的用法时,可以尝试去搜一些文档资料,在这个文件中配置就可以了。
先拷贝一下文件,输入命令 cp /etc/dnsmasq.conf /tmp/1.txt ,然后输入命令 vim /tmp/1.txt ,进入编辑,
可以看到这个文件没有颜色显示,因为文件名称为 1.txt ,只要是文件名为 .txt 后缀的文件,就不会显示颜色。想让这个文件显示颜色也可以,更改文件名即可,输入命令 mv /tmp/1.txt /tmp/xxx.conf ,再输入命令 vim !$ ,回车,见下图,
可以看到内容颜色显示为蓝色。编辑一下内容,还能看到不同的颜色变化,这边就不多讲解了,作个了解即可。
3、vim一般模式下移动光标
移动光标的时候,可以通过上下左右的方向键来操作,但是这样有点慢,下图说明了一些 vim 下比较常用的快捷键使用方法,
空格键也是向右移动的快捷键,还可以通过数字来控制它的位置。例如先按下数字5,再按空格键的话,光标就会直接向右移动5个字符。h、j、k、l 这些快捷键也都支持使用数字来控制光标移动的数量。
vim一般模式下移动光标的快捷方式
字符移动
h,j,k,l 左下上右
行内移动
w 正向移动到相邻单词的首字符
b 逆向移动到相邻单词的首字符
B 向前一个单词,以空格和TAB为分隔符
e 正向移动到相邻单词的尾字符
ge 逆向移动到相邻单词的尾字符
0 数字0,左移光标到本行的开始;
Shift + 6 ,左移光标到本行的开始;
Shift + 4 ,右移光标到本行的末尾;
$ 右移光标,到本行的末尾;
^ 移动光标,到本行的第一个非空字符
页移动
H 跳转到当前屏幕的第一行
M 跳转到本屏显示的中间一行
L 跳转到最后一行
2H 表示将光标移到屏幕的第2行
3L 表示将光标移到屏幕的倒数第3行
z + enter 是当前行成为屏幕的第一行
z + - 是当前一行成为最后一行
ctrl + f 在文件中前移一页(或 page down);
ctrl + b 在文件中后移一页(或 page up);
ctrl + d 往下滚动半屏
ctrl + u 往上滚动半屏
文件移动
gg 跳到首行
G 即 Shift +g ,跳到尾行
nG 跳转到n行,n 是任意数字,其中右下角也可以看到光标的位置,见下图,
% 跳到另一边括号
配合查找字符的方式移动
fa 正向移动到第一个字符 a 处
Fa 逆向移动到第一个字符 a 处
非相邻的单词或字符间移动
8w 正向移动到相隔八个单词的首字符
4Fa 逆向移动到第四个 a 字符
更大范围的移动
* 当光标停留在一个单词上,* 键会在文件内搜索该单词,并跳转到下一处;
# 当光标停留在一个单词上,# 在文件内搜索该单词,并跳转到上一处;
(/) 移动到 前/后 句 的开始;
{/} 跳转到 当前/下一个 段落 的开始。
g_ 到本行最后一个不是 blank 字符的位置。
fa 到下一个为 a 的字符处,你也可以fs到下一个为s的字符。
t, 到逗号前的第一个字符。逗号可以变成其它字符。
3fa 在当前行查找第三个出现的 a。
F/T 和 f 和 t 一样,只不过是相反方向;
gg 将光标定位到文件第一行起始位置;
G 将光标定位到文件最后一行起始位置;
NG或Ngg 将光标定位到第 N 行的起始位置
4、vim一般模式下复制、剪切和粘贴
替换和删除
Vim常规的删除命令是 d、 x (前者删除 行 ,后者删除 字符 ),结合Vim的其他特性可以实现基础的删除功能。将光标定位于文件内指定位置后,可以用其他字符来替换光标所指向的字符,或从当前光标位置删除一个或多个字符或一行、多行
gg dG 删除全部内容
d0 删除至行首
dl 删除当前字符, dl=x
dh 删除前一个字符
dd 删除当前行
dj 删除上一行
dk 删除下一行
dw 删除到下一个单词开头
de 删除到本单词末尾
dE 删除到本单词末尾包括标点在内
db 删除到前一个单词
dB 删除到前一个单词包括标点在内
10d 删除当前行开始的10行
d$ 删除当前字符之后的所有字符(本行)
D 删除当前字符至行尾。D=d$
kd gg 删除当前行之前所有行(不包括当前行)
jdG 删除当前行之后所有行(不包括当前行)
:1,10d 删除1-10行
:11,$d 删除11行及以后所有的行
:1,$d 删除所有行
J 删除两行之间的空行,实际上是合并两行
rc 用 c 替换光标所指向的当前字符;
nrc 用 c 替换光标所指向的前 n 个字符;
5rA 用 A 替换光标所指向的前 5 个字符;
x 删除光标所指向的当前字符;
nx 删除光标所指向的前 n 个字符;
3x 删除光标所指向的前 3 个字符;
dw 删除光标右侧的字;
ndw 删除光标右侧的 n 个字;
3dw 删除光标右侧的 3 个字;
db 删除光标左侧的字;
ndb 删除光标左侧的 n 个字;
5db 删除光标左侧的 5 个字;
dd 删除光标所在行,并去除空隙;一次只能剪切一行
ndd 删除(剪切) n 行内容,并去除空隙;
3dd 删除(剪切) 3 行内容,并去除空隙;
Vim常规的替换命令有 c 和 s ,结合Vim的其他特性可以实现基础的替换功能,不过替换命令执行以后,通常会由 编辑模式 进入 插入模式
s 用输入的正文替换光标所指向的字符;
S 删除当前行,并进入编辑模式;
ns 用输入的正文替换光标右侧 n 个字符;
nS 删除当前行在内的 n 行,并进入编辑模式;
cw 用输入的正文替换光标右侧的字;
cW 用输入的正文替换从光标到行尾的所有字符(同 c$ );
ncw 用输入的正文替换光标右侧的 n 个字;
cb 用输入的正文替换光标左侧的字;
ncb 用输入的正文替换光标左侧的 n 个字;
cd 用输入的正文替换光标的所在行;
ncd 用输入的正文替换光标下面的 n 行;
c$ 用输入的正文替换从光标开始到本行末尾的所有字符;
c0 用输入的正文替换从本行开头到光标的所有字符。
复制粘贴
yy 拷贝当前行
nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行
*“+y 复制 1 行到操作系统的粘贴板
*“+nyy 复制 n 行到操作系统的粘贴板
:1,10 co 20 将1-10行插入到第20行之后
:1,co 将整个文件复制一份并添加到文件尾部
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按y即可复制
ddp 交换当前行和其下一行
xp 交换当前字符和其后一个字符
正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按d即可剪切
ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
:1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。
:1, 10 m 20 将第1-10行移动到第20行之后。
x 剪切当前字符,即向后删除一个字符
3x 剪切当前光标开始向后三个字符,
X 剪切当前字符的前一个字符,即向前删除一个字符。X=dh
p (小写p)粘贴到下一行或右侧,修改和删除的数据自动到粘贴板中
P (大写P)粘贴到上一行或左侧
不规则剪切粘贴,可以先按 v 进入 visual mode 可视界面,通过上下左右方向键选中要替换的单词,再按小写 x 剪切,按小写 p 粘贴即可。
yiw (yank inner word)在一个单词的任意字母使用,就复制该单词
yw 则只是复制从光标所在字母到词尾的部分
撤销和重复
u 撤销最近一次修改 undo;一次恢复一个操作,最多恢复50次。恢复到最原始的操作之后,左下角会出现文字“已位于最旧的改变”。
. 重复最后一条修改正文的命令
U 撤销所有修改
Ctrl + r 取消最后一次的撤销 redo
块编辑
v 可进入visual模式,使用标准快捷键移动光标可选择文本块,之后可输入标准编辑命令
ctrl + v 列编辑
行尾块…
插入模式
进入
i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行
s 删掉当前字符,并进行输入
x 删掉当前字符,停留在Normal模式
退出
Esc
ctrl + O 暂时性的
ctrl + C 取消当前的任何操作
ctrl + [ 官方推荐替换Esc
移动光标 尽量不要进入插入模式移动光标
ctrl + H 光标移当前行行首 imap
ctrl + J 光标移下一行行首 imap
ctrl + K 光标移上一行行尾 imap
ctrl + L 光标移当前行行尾 imap
Alt + H 光标左移一格 imap
Alt + J 光标下移一格 imap
Alt + K 光标上移一格 imap
Alt + L 光标右移一格 imap