Last Updated on

Linux系统配置需要编辑大量的配置文件,在图形化界面中编辑这些文件很简单,通常使用gedit,它类似于windows记事本。但是作为运维人员,通常都是在命令行模式下操作的,这就需要熟悉最通用,最经典的文本编辑器Vim/Vi。

Vim是Vi的增强版本。掌握Vim对于Linux运维人员来说是必须的。

1. 操作模式

vim分为3种操作模式,代表不同的操作状态,理解这一点并掌握模式之间的切换是使用vim种的重中之中。

  • 命令模式: 输入的任何字符都作为命令来处理,可控制屏幕光标的移动,行编辑(删除,移动,复制)等。
  • 插入模式: 输入的任何字符都作为插入的字符来处理,也就是正常的编辑文件。
  • 末行模式: 执行文件级或全局性操作,如保存文件,退出编辑器,设置编辑环境等。

使用vim打开文件,默认进入为命令模式

在命令模式下,输入以下任一命令切换到插入模式:

  • a: 附加命令,从当前光标位置右边开始输入下一字符。
  • A: 附加命令,从当前光标所在行的行尾开始输入下一字符。
  • i: 插入命令,从当前光标位置左边插入字符。
  • I: 插入命令,从当前光标所在行的行首插入字符。
  • o:打开命令,从当前光标所在行新增一行并进入插入模式,光标移动到新的一行的行首。
  • O:打开命令,从当前光标所在行上方新增一行并进入插入模式,光标移动到新的一行的行首。

在插入模式下,按<Esc>键退出插入模式,切换到命令模式。

在命令模式下,按 : 进入末行模式。

在末行模式下, 按<Esc>键退出末行模式,切换到命令模式。

这三个模式之间的切换都是通过命令模式做中转的,如图:

2. 命令模式下的命令

在了解了Vim的模式后,插入模式就为普通的文本编辑状态,主要需要注意的就是命令模式下的命令和末行模式下的命令的使用。

下面就来将一下命令模式下的一些常用命令和操作:

(1)移动光标

Vim可以直接使用键盘上的h,j,k,l来控制光标左,下,上,右进行移动,等同于键盘的上下左右按键,这可以让用户不用把手移开键盘去操作上下左右键,快捷且很酷。

h:光标向左移动一个字符

j:光标向下移动一个字符

k:光标向上移动一个字符

l:光标向右移动一个字符

0:移动光标到所在行行首

$:移动光标到所在行行末

^:移动光标到所在行的第一个非空字符

w:光标移动到下一个单词的开头

e:移动光标至当前或下一个单词的词尾

b:移动光标至当前或前一个单词的词首

G:光标移动到文件最后一行

gg:光标移动到文件第一行

nG(n为数字):光标移动到文件第n行

(2)删除

删除内容可以在插入模式中,使用键盘上的删除键进行删除,同时在命令模式下,也可以,并且可以更方便。

x:向后删除一个字符(就是光标所处的字符)

nx(n为数字):向后删除n个字符

dd:删除光标所在行

ndd(n为数字):删除光标所在行开始往下的n行

(3)复制,粘贴

在命令模式下,可以直接进行复制,粘贴。

y:复制光标所在字符

yw:复制光标所在处到词尾的字符

yy:复制光标所在行

nyy(n为数字):复制光标所在行开始往下的n行

p:将缓冲区的内容粘贴到光标所在位置(删除和复制的内容都将被放到内存缓冲区)

(4) 查找

/:先按/键,然后输入要查找的字符,在按回车键向下查找字符

?:先按?键,然后输入要查找的字符,在按回车键向上查找字符

查到匹配到内容后,被匹配到的内容会高亮显示,使用下面命令,在匹配到的内容中移动.

n:光标移动到下一个匹配的内容

N:光标移动到上一个匹配的内容

(5)撤销

u:撤销上一个操作

ctrl+r:撤销上一个撤销操作

(6)翻屏(页)

Ctrl+f:向下翻一屏(一个屏幕的内容也可以说是一页,下同)

Ctrl+b:向上翻一屏

Ctrl+d:向下翻半屏

Ctrl+u:向上翻半屏

3. 末行模式下的命令

上面列举了常见的命令模式下的一些命令操作,下面就列举一些在进入末行模式后的一些命令:

在命令模式下,按 : 进入末行模式。在末行模式下输入命令后,需要单击回车进行运行。在末行模式下!表示强制执行

:w:保存文件内容并继续编辑

:w filename:将文件存入指定的文件名filename,没有文件则会新建,若文件存在则需要加上!,强制写入,会覆盖已存在文件呢内容

:q:退出vim编辑器,如果有修改没有保存,则会报错无法直接退出

:q!:不保存内容,强制退出vim编辑器

:wq:保存内容并退出vim编辑器

:set nu:显示文件行号

:set nonu:不显示文件行号

:n(n是数字):跳到文件的第n行

:set hlsearch:找到的内容高亮显示

:set nohlsearch:找到的内容不高亮显示

:syntax on:开启语法高亮

:syntax off:关闭语法高亮

总结

Vim的编辑器除此之外,还有很多的设置和命令,特别是set的命令,模式模式下可以直接使用,但是除此之外,如果你想每次打开Vim都能保留你的设置,

Vim编辑器有其配置文件,可以通过在配置文件中进行设置,使得每次使用vim打开文件都能有相应的一些设置,比如显示行号等。

配置文件路径如下:

  • /etc/vimrc:全局配置文件,对所有用户生效
  • ~/.vimrc:当前用户的个人配置,只对当前用户有效

Centos7中,默认是没有安装Vim的,只有Vi命令,可以通过yum install vim 安装vim编辑器,全局配置文件为/etc/vimrc

默认的vi命令,同样的全局配置文件为/etc/virc


另外,在使用vim编辑文件时,会生成一个隐藏的交换文件,.filename.swp。在退出后会自动删除。如果在一个用户正在编辑文件时,另一个用户也用vim编辑同一个文件,则会出现如下报错:

给出了几个选择:

  • O:只读打开
  • E:读写打开
  • R:覆盖打开
  • Q:退出
  • A:放弃

Q和A差不多,就是退出编辑,回到命令行。O就是只读打开,无法编辑,打开能看到第一个用户已经通过w保存的内容。

E和R都是以可编辑状态打开,不同的是,E打开时读取的内容是其他用户已经保存的内容,未保存的还处于缓存状态的修改无法看到。而R则是可以看到其他用户的所有修改,包括已保存的和未保存的。

当别的用户已经在你保存前修改了文件,你保存时会弹出报错:

按y保存的花,则会以后面的内容为准,覆盖掉之前别人的修改。所以在编辑使用时需要注意一下。

OK,关于Vim编辑器在服务器上的使用,大致就说到这里。

vim除了作为服务器上的文件编辑器,也可以作为自己电脑的代码编辑器,可以配置代码补全等等功能配置。由于现在编辑器多是使用IDE,比较少用Vim,但是可以玩一下,关于Vim做代码编辑器的话。这个以后有空再单独记录一篇。

有任何问题,欢迎留言