Vim是Linux中常见的的文本编辑工具,在日常系统运维、编写Shell脚本等场景会经常用到。本文介绍Vim编辑器的基本命令和模式切换,帮助您快速上手使用Vim编辑器。
安装情况
Linux系统都已经默认安装Vim工具,您无需进行安装。在终端中输入vim --version
查看Vim版本信息。本文档以vim 8.0版本为例进行介绍,其他版本可能存在差异,请参考使用。
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Aug 10 2022 11:26:47)
Included patches: 1-1763
Modified by OpenAnolis Community
Compiled by OpenAnolis Community
Huge version without GUI. Features included (+) or not (-):
+acl +farsi +mouse_sgr -tag_any_white
......
模式切换
使用命令 vim filename
打开文件,即进入普通模式。如果文件不存在,Vim会新建一个文件。Vim的各个模式及切换方法如下所示。
|
|
|
模式 |
作用 |
模式转换 |
普通模式 (Normal Mode) |
在该模式下,您可以复制、粘贴、删除字符或行。 |
|
插入模式 (Insert Mode) |
在该模式下,您可以插入字符。 |
在普通模式下,按 进入插入模式后,编辑器左下角会显示 |
替换模式 (Replace Mode) |
在该模式下,您可以替换字符。 |
在普通模式下,按 进入替换模式后,编辑器左下角会显示 |
可视模式 (Visual Mode) |
在该模式下,您可以选择文本。命令(如,复制、替换、删除等)仅作用于选中的文档。 |
在普通模式下,按 进入可视模式后,编辑器左下角会显示 |
命令模式 (Command Mode) |
在该模式下,您可以查找字符串、替换字符串、显示行号、保存修改、退出编辑器等。 |
在普通模式下,按 |
基本命令
打开文件
-
vim filename
:打开单个文件。进入普通模式,如果文件不存在,Vim会新建一个文件。 -
vim filename1 filename2
: 打开多个文件。-
默认进入第一个filename1,正常编辑并使用
:w
保存filename1后,输入:bn
进入下一个filename2,正常编辑并使用:w
保存filename2。 -
输入
:bp
进入前一个filename1。 -
输入
:ls
可以查看编辑列表。
-
-
:open filename3
:在Vim的命令模式下打开一个新的文件进行编辑。执行该命令前,请先使用:w
保存原编辑文件。
移动光标
-
在普通模式下
-
方向键上/k:光标向上移动。
-
方向键下/j:光标向下移动。
-
方向键左/h:光标向左移动。
-
方向键右/l:光标向右移动。
-
-
在插入模式下
-
只能通过上、下、左、右方向键移动光标。
-
插入内容
在普通模式下,按i,I,a,A,o,O
中任一字符即进入插入模式。
-
i
:在当前字符的左边插入。 -
I
:在当前行的行首插入 。 -
a
:在当前字符的右边插入。 -
A
:在当前行的行尾插入。 -
o
:在当前行下面插入一个新行。 -
O
:在当前行上面插入一个新行。
复制和粘贴
类似于Word文档编辑器里Ctrl+C和Ctrl+V。在普通模式下:
-
yy
:复制光标所在的行内容。可以直接使用p
进行粘贴。 -
nyy
:n为数字。例如2yy
,复制光标所在行和下一行内容,即复制2行。 -
p
:粘贴到光标所在的下一行。 -
P
:粘贴到光标所在的上一行。
删除
-
在普通模式下
-
删除单个字符:按键盘
x
键删除当前光标所在位置的字符。 -
删除整行:按键盘
dd
删除当前行。类似于Word文档编辑器里Ctrl+X,可以直接使用p
进行粘贴。 -
删除上一行:按键盘
dk
删除当前行和上一行。 -
删除下一行:按键盘
dj
删除当前行和下一行。 -
dG
:按键盘dG
删除当前行至文档末尾。 -
nx
: n为数字。删除光标高亮的字符及其后面的n-1个字符。 -
ndd
:n为数字。删除光标所在行及其下面的n-1行。类似于Word文档编辑器里Ctrl+X,可以直接使用p
进行粘贴。
-
-
在插入模式下
-
将光标移动到想要删除内容的右侧,键入
Delete键
。
-
查询
在普通模式下
-
/text
:查询text,默认精确匹配,回车后高亮显示命中字符。-
如果要忽略大小写进行查询,先执行
:set ignorecase
。执行:set noignorecase
返回精确匹配。
-
-
n
:光标向下查询或下一个。 -
N
:光标向上查询或上一个。
替换
-
在普通模式下
-
r
:直接替换光标高亮的字符。 -
R
:进入替换模式,连续替换光标高亮的字符,直至按下Esc
键退出替换模式。 -
cc
:直接删除光标所在的行,并进入插入模式。 -
:%s/oldtext/newtext/g
:查询所有oldtext并替换为newtext。/g
表示全部替换,若不加,则只替换所有行的第一个匹配。
-
-
在插入模式下
-
通过删除内容、插入内容的方式进行内容替换。
-
撤销与重做
在普通模式下
-
u
:撤销插入或修改。类似于Word文档编辑器里的Ctrl+Z
。 -
U
:撤销对上一次行内容的所有插入和修改。 -
Ctrl+r
:重做,即恢复撤销。相当于Word文档编辑器里的重做Ctrl+Y
。
缩进与排版
-
在普通模式下
-
>>
:整行向右缩进。默认值为8,即默认缩进一个制表符(Tab)的空格数。 -
<<
:整行向左缩进。
-
-
在命令模式下
-
:ce
:整行居中对齐。 -
:le
:整行向左对齐。 -
:ri
:整行向右对齐。
-
注释代码
-
备份文件:在执行大范围替换操作前,建议备份文件或及时使用撤销功能(
u
)以防误操作。备份命令可参考sudo cp /etc/text.txt /etc/text.txt.bak
。 -
正则表达式:确保理解 Vim 正则表达式的含义,避免意外删除不相关内容。在 Vim 的正则表达式中,
/
需要转义为\/
。如果您对正则表达式不够熟悉,可以使用Regex101等工具进行练习和调试。 -
不同语言的注释风格:根据具体使用的编程语言调整替换命令中的注释符。
-
在可视模式下
-
注释连续多行代码
-
上下移动光标选中待注释的行。
-
按
:
进入命令行模式,此时会自动填充:'<,'>
,表示对选中的范围进行操作。 -
输入替换命令,例如要在每行前添加
#
,输入s/^/#/
然后按Enter
。
-
-
注释所有代码:输入替换命令
:%s/^/#/g
,全文使用#
进行注释。
-
-
在插入模式下
手动插入注释符号的方式注释代码。
保存与退出
-
保存文件:在普通模式下输入
:w
并按下回车键。 -
退出 Vim:输入
:q
并按下回车键。 -
保存并退出:输入
:wq
或:x
并按下回车键,或直接使用ZZ
命令。 -
强制退出不保存:输入
:q!
并按下回车键。 -
强制退出并保存:输入
:wq!
并按下回车键。
加密文档
-
对文档进行加密:
vim -x filename
。自行设置密码后,进入普通模式。注意必须保存一次,否则加密不会生效。再次进入时需要进行密码验证。 -
取消文档加密。
-
在 Vim 中,执行命令
:set key=
取消加密。这条命令将清空当前文件的加密密钥,从而移除加密设置。 -
使用
:wq
命令保存并退出。 -
再次执行
vim filename
打开文件,不再出现密码验证提示。
-
执行命令
-
!pwd
:在不退出Vim情况下,显示当前工作目录。 -
!ls
:在不退出Vim情况下,列出当前目录下的文件和文件夹。
多窗口编辑
-
vim -o filename1 filename2
:同时打开两个窗口显示文件。退出时需要分别执行退出命令。 -
:n
:切换到另一个文件窗口,进行编辑。 -
:N
:返回到上一个文件窗口,进行编辑。
帮助文档
-
在终端中输入
vim --help
查看Vim命令语法帮助信息。 -
在普通模式下
-
:help
:查看Vim帮助文档。Vim帮助文档为只读,输入:q
可退出帮助文档。 -
:help i
:显示i
的帮助文档。 -
:help yy
:显示yy
的帮助文档。 -
:set nu
:显示行号。
-
示例
修改配置文件
在配置文件example.conf的第一行,插入Location
。步骤如下:
-
运行
vim example.conf
命令打开文件,进入普通模式。 -
当前光标在该文件的第一个字符,按键盘
i
进入插入模式。 -
输入
Location
,按回车键换行。 -
按键盘
Esc
键退出插入模式。 -
输入
:wq
保存文件并退出。
在目标行插入内容
在配置文件example.conf第10行的行首,插入#
。步骤如下:
-
运行
vim example.conf
命令打开文件,进入普通模式。 -
按键盘
:10
将光标定位到第10行。 -
按键盘
i
进入插入模式。 -
输入
#
。 -
按键盘
Esc
键退出插入模式。 -
输入
:wq
保存文件并退出。
查找并插入内容
在配置文件example.conf中,在Include conf.modules.d/*.conf
行的下一行插入LoadModule rewrite_module modules/mod_rewrite.so
。步骤如下:
-
运行
vim example.conf
命令打开文件,进入普通模式。 -
运行
/Include conf.modules.d/*.conf
找到目标行。 -
按键盘
i
进入插入模式。 -
输入
LoadModule rewrite_module modules/mod_rewrite.so
。 -
按键盘
Esc
键退出插入模式。 -
按
:wq
保存文件并退出。
删除内容
在配置文件example.conf中,将#Listen 12.34.XX:XX:80
行首的#
删除,并删除Listen 80 。步骤如下:
-
运行
vim example.conf
命令打开文件,进入普通模式。 -
运行
/#Listen 12.34.XX:XX:80
找到目标,此时光标定位在#
字符上。 -
按键盘
x
删除#
。 -
光标移到Listen 80 ,按键盘
dd
删除该行。 -
输入
:wq
保存文件并退出。
编辑Docker.yaml
创建并编辑docker-compose.yaml
文件,示例如下。
去除多行注释
-
假设注释
#
位于行首,可能有空格和缩进:# This is a comment # Another comment # Yet another comment
-
执行以下命令:
:%s/^\s*#\s\?//
说明:
-
^
:匹配行首。 -
\s*
:匹配任意数量的空白字符(用于处理缩进)。 -
#
:注释符号。 -
\s\?
:匹配注释符后的一个可选空格。 -
//
:表示将匹配到的内容替换为空,即删除。
命令会遍历整个文件,去除后文件如下所示:
This is a comment Another comment Yet another comment
-
升级Vim
如果当前操作系统的Vim不满足您的需求,您可以执行以下命令进行软件版本升级。
sudo yum update vim
常见错误
-
退出时提示“No Write…”:
-
错误原因:文件有改动但没有保存。
-
解决方案:使用
:wq
保存并退出,或:q!
放弃修改并退出。
-
-
无法输入文本:
-
错误原因:可能处于可视模式。
-
解决方案:按
Esc
键返回正常模式,然后进入插入模式。
-
-
无法保存文件:
-
错误原因:可能没有权限。当前用户对目标文件或其所在的目录没有写权限。例如,系统配置文件(如
/etc/hosts
、/etc/nginx/nginx.conf
等)通常需要超级用户权限才能修改。 -
解决方案1:使用
sudo
命令以超级用户权限启动Vim。例如sudo vim example.conf
。 -
解决方案2:使用
:w !sudo tee %
以管理员权限保存当前文件。如果需要变更配置文件的权限和归属,可进一步使用sudo chown
或sudo chmod
等命令。
-
-
存在“.swp”后缀文件:
-
错误原因:文件被其他Vim会话打开。
-
解决方案:确认没有其他终端正在编辑该文件,通过
ll -a
查询并删除.swp
文件,然后再进行编辑;或者使用:recover
命令进行恢复后进行编辑。
-