Vim 的精髓在于“模式化编辑”,通过不同模式(普通、插入、可视、命令等)大幅提升文本操作效率,本文详细解析 Vim 常用模式与操作。
一、Vim 常用模式与操作
Vim 的精髓在于“模式化编辑”,不同模式下按键功能不同,组合操作可以极大提升编辑效率。下列是几个核心模式:
- 普通模式(Normal Mode):Vim 启动后默认进入的模式,用于导航、删除、复制等操作。
- 插入模式(Insert Mode):按
i、a、o等键进入,可进行正常的文本输入。 - 可视模式(Visual Mode):按
v(字符可视模式)、V(行可视模式)或Ctrl + v(块可视模式)进入,用于批量选定文本后再执行批量操作。 - 命令模式(Command Mode):在普通模式下按
:进入,执行如保存、替换等命令。 - 替换模式(Replace Mode):按
R进入,输入的新字符将覆盖光标后的文本。
退出回到普通模式只需按 Esc。
1 | # 例如,在普通模式下执行删除操作: |
¶1. 文件操作
:w:保存文件(Write)。:q:退出(Quit)。:wq或:x:保存并退出。:q!:强制退出,不保存更改。:e filename:打开或编辑新的文件。:saveas filename:另存为指定文件。(或者:w 文件路径)
这些命令都需要先进入命令模式(在普通模式下按 :)。
¶2. 光标移动与翻屏
h / j / k / l:分别向左、下、上、右移动一个字符。0:移动到行首,^:移动到本行第一个非空字符。$:移动到行尾。w / b:向后/向前移动一个单词。Ctrl + f/Ctrl + b:向下/向上翻一屏。gg:移动到文件开头,G:移动到文件末尾。{number}G:移动到指定行号。
¶3. 删除、复制、粘贴与撤销
- 删除
x:删除当前光标字符。dd:删除当前行。d{motion}:配合移动指令一次性删除,比如dw删至下个单词开头、d$删至行尾。G:删除当前行的该位置到最后的所有内容
- 复制(yank)
yy:复制当前行。y{motion}:配合移动指令复制一定范围(如yw复制一个单词)。
- 粘贴
p:在光标后粘贴(粘贴到下一行或光标右侧)。P:在光标前粘贴(粘贴到上一行或光标左侧)。- 要粘贴大量代码或者配置文件,可能会被自动注释,建议先进入
:set paste模式。
- 撤销与重做
u:撤销最近一次操作。Ctrl + r:重做被撤销的操作。
¶4. 剪切(移动文本)
dd:删除当前行,也可视为剪切当前行。- 复制并删除原位置的组合,等效于剪切后粘贴到目标位置。例如:
dd(剪切一行)- 移动光标到目标行
p(粘贴)
¶5. 命令模式下常用命令
:set number:显示行号。:noh:取消搜索高亮。:maps/:verbose map等:查看当前映射(可用于排查快捷键冲突)。:!命令:执行外部命令,如:!ls列出当前目录。
二、Vim 高级应用
¶1. 多窗口与分屏
对于大文件或多文件协同查看,Vim 提供了强大的分屏与多窗口功能:
-
:split或:sp:水平分割当前窗口。 -
:vsplit或:vsp:垂直分割当前窗口。 -
Ctrl + w后跟h/j/k/l:在分割窗口之间移动光标。 -
:close:关闭当前分割窗口。 -
:only:保留当前窗口并关闭其他所有分屏。 -
:tabnew:新建标签页,类似浏览器多标签模式。 -
gt/gT:在标签页之间切换。 -
多人打开一个文件,会有一个
swp文件,vim该文件会提示你可以进行的操作:继续、不管、退出等。
或者没有正常退出也会出现这个问题,不要数据的话直接删掉
swp文件就行,要数据的话vim原始的文件,进行命令选择,之后再删除swp文件。
灵活运用分屏和多标签,可以同时查看多个文件或多个部分,提高编辑与对比效率。
1 | # 可以试试在同一文件中查看不同位置: |
¶2. 宏录制与应用
在处理重复性操作时,Vim 的宏功能特别高效。可以将一系列操作录制下来,然后对其他文本执行相同操作。
q{register}:开始录制宏到指定寄存器(如q a录制到a寄存器)。- 任意编辑操作(如移动、删除、插入文本)。
q:停止录制。@{register}:调用宏(执行刚才录制的步骤)。@@:重复上一次调用的宏。
若需多次重复,只需在普通模式下输入 {number}@{register},就能批量执行宏。
1 | # 宏录制实例: |
¶3. 代码折叠
当你需要在大文件中专注于某个代码块或区域时,可以使用折叠功能隐藏不关心的部分:
zR:展开所有折叠。zM:折叠所有。za:切换当前块折叠/展开状态。zc:折叠当前代码块。zo:展开当前代码块。
这在查看函数、类或配置文件的片段时尤为实用。
1 | # 若有一个大函数,可以在函数块内键入: |
¶4. 批量替换
Vim 支持非常灵活的替换和正则匹配。基本格式为:
:s/旧内容/新内容/g
仅替换当前行所有匹配,不加 g 就只会匹配第一个。
:%s/旧内容/新内容/g
替换整个文件所有匹配。
需要更精细的范围时,可以在命令前加行号或选中可视模式后输入 :s 命令。
:10,20s/foo/bar/g:仅在第 10~20 行执行替换。- 正则表达式可极大增强替换能力,例如匹配复杂模式并加入分组。
1 | # 例如,将所有 "TODO" 替换为 "DONE": |
¶5. 自定义与配置
Vim 可以高度定制,通过修改 ~/.vimrc(或 ~/.config/nvim/init.vim 在 Neovim 中)实现个性化配置:
set number:显示行号。set expandtab、set tabstop=4、set shiftwidth=4:控制 Tab 与缩进。syntax on:开启语法高亮。高亮的两种方式:- 修改文件后缀
- 加文件头,例如:
#! /bin/bash#! /usr/bin/python,加完之后退出重进
set relativenumber:相对行号,方便行距离计算。- 使用 autocmd 设置自动命令,如保存前自动去除行尾空白等。
1 | # 典型 .vimrc 示例如下: |
- 本文标题:Linux Vim 解析
- 本文作者:Chen Kai
- 创建时间:2025-01-12 00:00:00
- 本文链接:https://www.chenk.top/Linux Vim 解析/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!