2023-05-22    2023-12-23    1809 字  4 分钟

认识vim

vi和vim

vivim都是Linux系统中的编辑器。

vimvi的升级版本,兼容vi的所有指令,并具有一些新的特性,如多级撤消、易用性、语法加亮、可视化操作以及对vi的完全兼容等。

总的来说,vimvi的高级版本,具有更多的特性和更好的性能。

vim有命令模式,编辑模式末行模式,接下来我们将学习vim的常用用法。

最小化安装系统,默认没有安装vim,需要执行以下命令,手动安装。

1
[root@localhost ~]# yum install vim -y

image-20231124125413545

命令模式

在该模式下不能对文件直接进行编辑,但可以使用一些快捷键对文件进行操作(删除行、复制行、移动光标、粘贴等)。这是打开vim时默认进入的模式。

光标跳转

选项 解释
G 光标条至文件末端。
gg 光标跳转至文件顶端。
5gg 光标跳转至当前文件的第5行,5可以是任意数字。
$ 光标跳转至当前光标所在行的尾部。
^ 光标跳转至当前光标所在行的首部。

复制与粘贴

选项 解释
yy 复制当前光标所在的行。
5yy 复制当前光标以及光标向下4行。5可是任意数字。
p 粘贴至当前光标下一行。

删除与剪贴

选项 解释
dd 删除当前光标所在的行。
5dd 删除当前光标以及光标向下4行。5可是任意数字。
dG 删除当前光标以后的所有行。
D 删除当前光标及光标以后的内容。

替换与撤销

选项 解释
u 撤销上一次的操作。
r 替换光标所在字符。

编辑模式

此模式也叫输入模式,在该模式下可以对文件内容进行编辑,和使用普通的文本编辑器一样。

选项 解释
i 进入编辑模式,光标不做任何操作。
a 进入编辑模式,将当前光标往后一位。
o 进入编辑模式,并在当前光标下添加一行空白内容。

末行模式

此模式也叫尾行模式,可以在末行输入命令来对文件进行操作(搜索、替换、保存、退出、撤销、高亮等)。

文件保存与退出

选项 解释
:w 保存当前状态。
:q 退出当前文档(文档必须保存才能退出)。
:wq 先保存,在退出。
强制执行,可配合w、q、wq使用。

文件内容另存 将文件另存为/root/123.txt

image-20231124132052308

文件内容查找与替换

选项 解释
/string 需要搜索的内容(查找)。
n 按搜索到的内容依次往下进行查找。
N 按搜索到的内容依次往上进行查找。

查找root相关内容。

image-20231124131227942

文件内容替换 替换2-5行中包含bin的内容为snoopy

image-20231124132651535

替换整个文本文件中包含bin的替换为ops

image-20231124131905561

vim视图模式

块视图模式

ctrl+v可进入视图块模式,可通过移动光标进行选择。

image-20231124133111630

shift+i可进行编辑。

image-20231124133249898

esc,刚刚选中的块都会快速填充。

image-20231124133335587

在视图块模式下,选中要删除的内容,按d可快速删。

image-20231124133449430

选中需要替换的内容, 按下r键,然后输入替换后的内容。如图,我们可以将选中的字符替换为@

image-20231124133714258

行视图模式

shift+v可进入视图行模式,可通过移动光标进行选择。

复制: 选中行内容后按y键及可复制。

image-20231124133912229

粘贴:按p可粘贴。

image-20231124134032150

删除:选中行内容后按d键删除。

image-20231124134200886

vim扩展知识

个性化配置

我们可以通过以下指令对文件进行个性化设置,但是只针对当前打开的vim实例有效,关闭了vim之后再次打开,之前的设置就无效了。

选项 解释
:set nu 显示行号。
:set ic 忽略大小写, 在搜索的时候有用。

vimrcvim的配置文件,vim在启动时会加载vimrc文件。几乎所有的配置,包括主题、快捷键、插件设置等等,都可以配置在vimrc中。若要永久生效配置,需要将指令添加到vimrc配置文件中。

~/.vimrc 个人vim配置优先级高。编辑此配置。文本最后直接添加以下内容即可。

1
2
set nu
set ic

/etc/vimrc 全局vim配置,优先级低于个人配置。

文件对比

diff用于文件对比。如

1
[root@localhost~]# diff passwd test.txt 

diff显示不直观。我们可以通过vimdiffvim方式打开两个文件对比,高亮显示不同的内容。

1
[root@localhost~]# vimdiff passwd test.txt 

image-20231124134440832

异常退出处理

如果vim非正常退出(ctrl+z)挂起或强制退出终端没关闭vim后。再次通过vim编辑文件时,会有如下提示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@localhost~]# vim passwd 
E325: ATTENTION
Found a swap file by the name ".passwd.swp"
          owned by: root   dated: Thu Aug  1 14:03:58 2019
         file name: ~root/passwd
          modified: YES
         user name: root   host name: localhost
        process ID: 10939 (still running)
While opening file "passwd"
             dated: Thu Aug  1 12:38:26 2019

(1) Another program may be editing the same file.  If this is the case,
    be careful not to end up with two different instances of the same
    file when making changes.  Quit, or continue with caution.
(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r passwd"
-- More --


    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".passwd.swp"
    to avoid this message.

Swap file ".passwd.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

仔细阅读以上内容,我们发现提示.swp文件已经存在。使用vim编辑文件实际是先copy一份临时文件并映射到内存给你编辑,编辑的是临时文件, 当执行:w后才保存临时文件到原文件,执行:q后才删除临时文件。

遇到上述情况,可以先按R,将原来正在写入的内容保存。然后删除.swp文件。

1
[root@localhost~]# rm -f .passwd.swp

image-20231028232834657