使用 VIM 编辑器对文件进行编辑
简要记录了使用 VIM 编辑器对文件进行编辑时的一些操作。
目录
一、VIM 的两种状态
VIM(vimsual)是 Linux/UNIX 系列 OS 中通用的全屏编辑器。vim 分为两种状态,即命令状态和编辑状态,在命令状态下,所键入的字符系统均作命令来处理;而编辑状态则是用来编辑文本资料(类似 word)。
当进入 vim 时,会首先进入命令状态。在命令状态下,输入 i(插入)或 a(添加)可以进入编辑状态(左下角有 - - INSERT - -,或者 - - 插入 - - 代表处于编辑状态);在编辑状态下,按 Esc键 进入命令状态。
在命令状态下,有如下一些常用命令:
新增:
| 键入指令 | 含义 |
|---|---|
a |
从光标后面开始添加文本 |
A |
从光标所在行的末尾开始添加文本 |
插入:
| 键入指令 | 含义 |
|---|---|
i |
从光标前面开始插入文本 |
I |
从光标所在行的开始处插入文本 |
注意
当需要编辑一个名为 file 的文件时,输入 vim file 命令并进入编辑状态时,出现 “- - 插入 - - W10:警告:正在修改一个只读文件” ,该如何处理?
① 查看 file 文件的权限:ls -l ,发现没有写权限
② 进入 root 用户,给 file 文件添加写权限:su → chmod a+w file ,此时再执行 ls -l 命令,可以发现 file 文件有了写权限
此时再 vim file 并编辑,就不会出现上述问题了。

二、VIM 的常用命令操作(类似快捷键)
以下操作均在 “命令状态” 下进行
1. 删除与修改
删除:
| 键入指令 | 含义 |
|---|---|
x |
删除光标处的字符 |
dd |
删除光标所在的整行 |
[n]dd |
删除光标所在行以及下面的 n-1 行(删除 n 行) |
D |
删除光标到行尾的文本,常用语删除注释语句(d$) |
修改:
| 键入指令 | 含义 |
|---|---|
yy |
复制光标所在的整行 |
[n]yy |
从光标开始往下复制 n 行,[n] 表示一个整数 |
p |
将复制后的文本粘贴到光标所在的下一行 |
u |
撤销上次操作 |
Ctrl+r |
恢复上次操作 |
快捷修改单个字母: 先按 r 键,再输入要替换的内容
2. 光标移动
| 键入指令 | 含义 |
|---|---|
^ |
光标移动到行首 |
$ |
光标移动到行尾 |
gg |
光标定位到文档头 |
G |
光标定位到文档尾 |
[n]G |
光标定位到第 n 行行首,[n] 表示一个整数,比如 20G ,也可以通过冒号 + 数字来定位到第几行,比如 :20 |
较不常用:
| 键入指令 | 含义 |
|---|---|
H |
光标定位到当前页首 |
L |
光标定位到当前页的最后一行的行首 |
w |
光标往后移一个字 / 单词 |
b |
光标往前移一个字 / 单词 |
3. 查找与替换
1)查找
/[str] :用来查找字符串 str ,[str] 表示要查找的字符串。回车后会加亮显示所有找到的字符串,输入 n 移动到下一个找到的字符串,输入 Ctrl n(即 N)移动到上一个找到的字符串。
例如:vim ~/.bashrc ,然后输入 /alias ,输入 n 向下翻,输入 N 向上翻。
2)替换
部分替换:
:s/[src]/[dst](只能替换光标所在的行)
例如:若要将光标所在行的 hello little dog 替换成 hello little cat ,则输入 :s/dog/cat
| 字符 | 含义 |
|---|---|
/i |
忽略大小写 |
/g |
全部匹配 |
例如:若要将 1-6 行的 hello 或 Hello 替换成 good ,则输入 :1,6s/hello/good/ig
全部替换:
-
:%s/[src]/[dst]/g:将文档中所有 src 的字符串替换为 dst 字符串
例如:若要将文档中所有的 hello 替换成 good ,则输入:%s/hello/good/g -
:%s/^ //g:将文档每一行的行首的空格去掉,想去掉几个空格,就在 ^ 与 / 之间打几个空格。
4. 块操作
-
v:可视化块选择状态,页面底部会出现 “- - 可视 - -” 的字样,选中块之后,可以对块进行删除(d),复制(y),剪切(x) -
Ctrl+v:竖向选择模式,页面底部会出现 “- - 可视 块 - -” 的字样
1)批量删除
假设你想删除多行文本开头的字符,可以按以下步骤操作:
-
将光标放在要删除的字符上,按下 Ctrl + v 进入块模式。
-
移动光标选择要操作的行。
-
按下 d 键删除选中的字符
2)批量插入
如果你想在多行文本的开头插入相同的内容,可以按以下步骤操作:
-
按下 Ctrl + v 进入块模式,选择要操作的行。
-
按下大写 I 键(即 Shift + i),进入插入模式。
-
输入你想要插入的内容,例如批量注释代码就输入 “//” 。
-
按下 Esc 键退出插入模式,插入的内容会应用到所有选中的行
3)块内替换
Vim 还支持在块内进行替换操作。例如,你可以使用 %V 进行块内替换:
-
按下 Ctrl + v 选择要替换的块。
-
按下 : 进入命令模式。
-
输入 s/%V[旧文本]/[新文本]/g,然后按下回车键
4)块复制和粘贴
你可以使用块模式复制和粘贴文本:
-
按下 Ctrl + v 选择要复制的块。
-
按下 y 键复制选中的内容。
-
移动光标到目标位置,按下 p 键粘贴内容
5)块删除和剪切
块删除和剪切操作类似:
-
按下 Ctrl + v 选择要删除或剪切的块。
-
按下 d 键删除选中的内容,或按下 x 键剪切选中的内容
6)块覆盖
块覆盖指的是在一个地方通过块复制或块剪切方式得到块的副本,然后在另一个地方再次块选择一个块的方位,按下 p 键,即可实现用块内容覆盖目标块。
5. 文档保存及退出
结束编辑,按 Esc 键进入命令状态。
| 键入指令 | 含义 |
|---|---|
:q |
在未修改文档的情况下退出 |
:q! |
放弃文档的修改,强行退出 |
:w |
文档存盘 |
:wq 或 :x |
文档存盘退出 |
需要注意:此时的键盘需要是英文的,冒号和感叹号必须是英文冒号和感叹号。
6. vim 的配置
放置 .vimrc 到 ~ 目录下:vim ~/.vimrc ,然后将下列指令放置在文件内:
set nu
set cursorline
set hlsearch
set tabstop=4
set fileencodings=utf-8,gbk,gb2312
-
set nu :显示行号
-
set cursorline :加一条横线
-
set hlsearch :搜索时高亮
-
set tabstop=4 :Tab 键是 4 个空格
-
set fileencodings=utf-8,gbk,gb2312 :设置编码
注意:用 vim 编辑文件时,使用的注释符号是一个双引号 " 。
7. 其他
1)Ctrl+s
如果在编辑过程中不小心按了 Ctrl + s ,vim 会处于僵死状态(被冻结),此时按 Ctrl + q 可以恢复。
2)Ctrl+z
在命令状态时,按了 Ctrl + z ,此时会出现如下所示的情况:

输入查看系统内所有进程的命令:ps -elf ,可以发现该进程虽然已经暂停,但仍占据内存空间

输入杀死进程的命令:kill -9 2823 ,然后再查看系统内所有进程:ps -elf ,可以发现进程已被杀死

若此时再输入命令:vim file1 ,会出现下图所示的情况:

可以选择恢复:按下 R 键,如果不想下次打开仍出现上述情况,则按下 D 键删除交换文件。
3)了解
-
在命令模式中输入
:help:查看该命令的帮助提示(不常用,通过键入:q退出) -
在命令模式中输入
:%!xxd:进入十六进制模式 -
在命令模式中输入
:%!xxd -r:返回文本模式 -
在命令模式中输入
gg=G可以自动对齐,可以通过输入gg=10gg只自动对齐第一行到第十行 -
增加一个横向的 vim :在命令模式下执行
:spor:new [文件名];增加一个纵向的 vim :在命令模式下执行:vspor:vnew [文件名](按 Ctrl + w 切换光标的区域,键入:q退出) -
定位到 file 的第 3 行:执行
vim +3 file -
定位到第一个 hello 处:执行
vim +/hello file

三、VIM 外使用到的命令
1. 管道查找替换程序 sed
举例:
1)将家目录下所有的 py 文件中的 function 替换成 case :find . -name "*.py" | xargs sed -i 's/function/case/g'
利用 find . -name "*.py" | xargs grep case 可以看出已经修改成功。

2)将 hello.py 中的 function 替换成 case 并重定向输出到 hello_new.py 中:sed 's/function/case/g' hello.py > hello_new.py

2. vimdiff 命令
vimdiff 命令是 Vim 编辑器 的 diff 模式,用于比较和合并文件。它等同于 vim -d 命令,可以同时打开多个文件,并高亮显示文件中内容的差异部分。
1)启动 vimdiff
vimdiff hello.py hello_new.py 或 vim -d hello.py hello_new.py

这会在 Vim 编辑器中垂直分割窗口,分别显示两个文件,并用不同的背景色高亮显示差异部分。
2)光标移动
在 vimdiff 模式下,可以使用以下快捷键在差异点之间移动光标:
| 快捷键 | 含义 |
|---|---|
]c |
跳转到下一个差异点 |
[c |
跳转到上一个差异点 |
- 要在两个窗口之间切换光标,可以使用以下按键:
Ctrl+w+l:切换到右侧窗口Ctrl+w+h:切换到左侧窗口Ctrl+w+w:在两个窗口间切换
3)内容合并
vimdiff 提供了方便的命令来合并文件内容:
-
dp(diff put):将当前差异点的内容覆盖到另一文件中的对应位置 -
do(diff obtain):将另一窗口中差异点的内容拉取到当前位置并进行替换
4)同时操作两个文件
在 vimdiff 模式下,可以使用 Vim 编辑器的命令和快捷键来操作文件:
| 键入指令 | 含义 |
|---|---|
:qa |
退出所有文件 |
:wa |
保存所有文件 |
:wqa |
保存并退出所有文件 |
:qa! |
强制退出(不保存)所有文件 |
更多推荐


所有评论(0)