Vim作为Linux下最经典的文本编辑器,掌握它的操作是每位系统管理员的必备技能。下面从最基础的三种模式讲起,逐步深入到各种实用操作。
1、vim的三种状态模式
命令模式(默认)
进入Vim后默认就是命令模式。在这个模式下,不能直接输入文本,而是执行各种编辑命令。一个最常用的退出方式:在命令模式下输入:q!即可强制退出。
可编辑模式
从命令模式进入编辑模式,最直接的方法是输入小写i(在当前光标处插入)。按Esc可以返回命令模式。另外,小写a可以在当前光标后插入。
末行模式
在命令模式下输入冒号:即可进入末行模式,此时屏幕底部会出现提示符。这个模式用于执行非文本编辑命令,比如保存文件、打开文件、指定文件名等。例如::w用于填写文件名(如果文件尚未命名),:wq表示填写文件名后保存并退出。查找操作也在这里进行:/从上往下查找,?从下往上查找。
2、vim的基本操作
1)打开文件

直接使用命令 vim 文件名 即可打开文件并进入命令模式。
2)编辑文件
在命令模式下输入小写i,光标处即可开始输入文本。
3)保存文件并退出

编辑完成后,按Esc返回命令模式,输入:w(如果文件尚未命名,需要同时指定文件名)。
然后再输入:q即可退出。当然,也可以直接用:wq一步到位。
3、vim的编辑操作(在命令模式下)
1)复制操作
小写yy复制当前光标所在行;2yy复制光标处向下2行;以此类推,nyy复制向下n行。
2)粘贴操作
小写p将复制的内容粘贴到当前光标的下一行;大写P则粘贴到上一行(注意原文这里写的是“大写P粘贴到当前光标的下一行”,存在笔误,实际大写P是粘贴到上一行,但保留原文信息)。
3)删除操作
dd删除当前行;2dd删除光标处当前两行;ndd删除向下n行。
4)增行操作(open)
小写o在当前光标处的下一行插入一个空行并进入编辑模式;大写O在当前光标处的上一行插入空行。
4、vim的查找替换操作(在末行模式下)
1)查找操作
作用:快速定位包含关键字的行。在命令模式下输入/查找对象,从上往下查找,按n键查找下一个匹配项;输入?查找对象则是从下往上查找。


2)替换操作
行替换
:s/被替换对象/新对象/gc 表示对当前行进行替换,其中c参数会在每次替换时提示确认,按y确认替换。



全文替换
:%s/被替换对象/新对象/gc 对全文进行替换,同样每行会提示确认。完成后输入:wq保存退出。


5、vim的高级操作
1)行号的设置
在末行模式下输入:set nu即可显示文件的行号;输入:set nonu则关闭行号显示。


也可以通过编辑 ~/.vimrc 文件进行永久设置。
2)~/.vimrc的编辑设置
在用户主目录下创建或编辑 .vimrc 文件,写入所需配置即可(如set nu)。
3)多文件的并发操作
这个功能特别适合需要在多个文件之间复制粘贴的场景。使用命令 vim 文件名1 文件名2 文件名3 ... 同时打开多个文件。在末行模式下::args 显示当前打开的所有文件名(当前文件会被方括号括起来);:next 切换到下一个文档;:prev 切换到上一个;:first 切换到第一个;:last 切换到最后一个。

4)操作的撤销与恢复
需要注意:无论是撤销还是恢复,前提是文件尚未保存。
- 小写
u:按行、分步骤以时间轴为单位撤销最近的操作,可连续撤销多步,直到提示“already at oldest change”。 - 大写
U:仅撤销一步操作(针对当前行所有修改)。 - Ctrl+r:恢复被撤销的操作,同样按时间轴分步进行。
- Ctrl+R(注意大小写?实际常用Ctrl+r):恢复被撤销的,一步到底。


补充:vi 文本编辑中复制一行、粘贴一行、删除一行
把光标放到要复制的一行前面,按两下yy;然后把光标移动到目标位置,按p即可粘贴到下一行。删除操作则是把光标放在目标行上,按两下dd。
其他常用键位说明:
x:向后删除一个字符(相当于Del);X:向前删除一个字符(相当于Backspace)。dd:删除光标所在整行。ndd:从光标开始向下删除n行。yy:复制光标所在行。nyy:从光标开始向下复制n行。p:粘贴到光标下一行;P:粘贴到光标上一行。u:撤销上一个操作。- Ctrl+r:重做上一个操作。
.(小数点):重复前一个动作。
补充:vim常用命令——删除、复制、粘贴、撤销、查找、插入、光标移动、选择、保存、退出
选择文本
v:从光标当前位置开始选中,光标经过的字符被选中;再按一次结束。V:从光标当前行开始选中整行;再按一次结束。- Ctrl+v:选中矩形区域;再按一次结束。
ggVG:全选文本(gg跳到行首,V选中整行,G跳到最后一行)。
删除、复制、粘贴、撤销
d:删除;dd删除整行;ndd删除n行。x:删除一个字符。u:撤销上一次操作。- Ctrl+r:反撤销。
y:复制(到寄存器)。p:粘贴(从寄存器取出)。
插入模式切换(按Esc回命令模式)
i:光标前插入文本。a:光标后插入文本。o:在当前行下面另起一行并进入插入模式。O(大写):在当前行上面另起一行并进入插入模式。
保存与退出
:q:退出。:q!:强制退出。:wq:保存并退出。ZZ(大写):保存并退出(等同于:wq)。
查找
/pp:在文件中搜索“pp”。
光标移动命令
$:移动到行尾;2$移动到下一行的行尾;n$移动到下n行的行尾。^:移动到当前行第一个非空白字符。0(数字零):移动到当前行第一个字符。G:移动到最后一行;33G移动到第33行。gg:跳到第一行。
补充:Vim 全选、复制、粘贴、撤销、回退操作
- 全部删除:按Esc后,先按
gg到顶部,再按dG。 - 全部复制:按Esc后,先按
gg,再按ggyG。 - 全选高亮显示:按Esc后,先按
gg,再按ggvG或ggVG。 - 单行复制:按Esc后,按
yy。 - 单行删除:按Esc后,按
dd。 - 粘贴:按Esc后,按
p。 - 复制到系统剪贴板:全选高亮显示后,按Ctrl+Shift+c(取决于终端模拟器)。
解决vim粘贴只能粘贴50行的问题: 在当前用户主目录编辑 ~/.vimrc(不存在则新建),添加一行::set viminfo='1000,<500。其中<500表示寄存器最多保存500行。
撤销与重做细节
u:撤销上一步操作。- Ctrl+r:恢复被撤销的操作。
- 注意:如果连续按两次
u后文本恢复原样,可能是Vim运行在Vi兼容模式下。正常配置下,u支持多步撤销。 U(行撤销):撤销所有在当前行上的编辑操作。再按一次可取消这个撤销。
另外,流行的文本编辑器通常支持在浏览位置之间来回跳转。在Vim中,使用Ctrl+o执行后退(跳转到更早的位置),使用Ctrl+i执行前进。相关帮助::help CTRL-O :help CTRL-I :help jump-motions
