1. VIM的特性
Vim 是一款高度可定制的文本编辑器,具有以下特点:
- 多模式编辑:Vim 采用多模式设计,主要包括普通模式(Normal Mode)、插入模式(Insert Mode)、命令模式(Command Mode)和可视模式(Visual Mode),每种模式都有其特定的功能。
- 高效操作:通过键盘快捷键和命令,用户可以快速执行各种编辑操作,无需频繁切换鼠标和键盘,从而提高编辑效率。
- 可扩展性:Vim 支持插件扩展,用户可以根据自己的需求安装各种插件,以增强编辑器的功能。
- 跨平台:Vim 可以在多种操作系统上运行,包括 Linux、macOS、Windows 等。
- 丰富的文档和社区支持:Vim 拥有庞大的用户社区和丰富的文档资源,用户可以轻松找到相关的帮助和教程。
2. VIM的模式
- Normal(default): 普通模式,Vim 将键盘输入视为命令,而不是直接插入文本。此模式提供了强大的文本编辑功能,例如移动光标、删除文本、复制粘贴等。
- Insert: 插入模式,Vim 会将键盘输入直接插入到文件中。
进入Insert模式:
- 按 i 进入 Insert 模式,位置: 当前光标前插入
- 按 a 进入 Insert 模式,位置: 当前光标后插入
- 按 I 进入 Insert 模式,位置: 光标当前行开头插入
- 按 A 进入 Insert 模式,位置: 光标当前行末尾插入
- 按 o 进入 Insert 模式,位置: 光标当前行下方插入新行
- 按 O 进入 Insert 模式,位置: 光标当前行上方插入新行
退出Insert模式:
- 按键返回到 Normal 模式 - Visual: 可视模式,用于选择文本范围,对选中文本进行操作。
进入Visual模式:
- 按 v 进入 Visual模式, 逐个字符选择
- 按 V 进入 Visual-Line模式, 逐行选择
- 按 Ctrl+v 进入 Visual-Block模式,逐列选择
可用命令:
- 方向键(h j k l)选择文本
-y
复制 选中的文本
-d
删除 选中的文本
->
缩进 选中的文本
-<
反缩进 选中的文本
-:
对选中文本执行Ex命令
退出Insert模式:
- 按键返回到 Normal 模式 - Command: 命令模式
3. VIM的命令
3.1 撤销、恢复
按键 | 描述 |
---|---|
u | 撤销 |
Ctrl -r | 恢复撤销 |
3.2 插入操作
i, I, a, A, o, O 相同点是:都会进入Insert模式,不同是:光标的位置不同。
i
光标前、I
行首、a
光标后、A
行尾、o
下一行、O
上一行
3.2.1 插入 I
nsertion
按键 | 操作步骤 | 描述 |
---|---|---|
i | 操作:i 输入字符 <ESC> | 在光标所在处进入插入模式 |
I | 操作:I 输入字符 <ESC> | 在光标所在行,行首非空字符 进入插入模式 |
gI | 操作:gI 输入字符 <ESC> | 在光标所在行,行首第一个字符 进入插入模式 |
注意: 按下
将进入NORMAL模式, 或取消不想要的和部分完成的命令。
3.2.2 追加 A
ppending
命令 | 使用说明 | 详细描述 |
---|---|---|
a | a 输入字符 | 在光标后追加字符 |
A | A 输入字符 | 在光标行尾追加字符 |
3.2.3 另开新行 O
pen
o
在光标下方打开一行,并进入Insert模式
.O
在光标上方打开一行,并进入Insert模式
.
3.3 删除操作 D
elete
命令 | 说明 | 示例 |
---|---|---|
d$ 或 D | 删除至行尾 | d$ |
d0 | 删除至行首 | d0 |
dG | 删除至文件末尾 | dG |
dgg | 删除至文件开头 | dgg |
dd | 删除多行,缺省值 1 | 3dd 向下删除 3 行 |
dw | 删除多个单词,缺省值 1 | 3dw 向后删除 3 单词,至下个单词开头 |
di" | 删除"引号内的内容" | 游标移动到修改所在行,键入di" ,会自动删除就近匹配的第一个双引号内的文本 |
x | 删除多个字符 向后,缺省值 1 | 3x 向后 删除 3 字符 |
X | 删除多个字符 向前,缺省值 1 | 3X 向前 删除 3 字符 |
3.4 修改操作 C
hange
除 x 外,其他删除的操作可以照搬到 修改操作c, 两者的区别是修改会进入Insert模式
,而删除会保留在Normal模式。
命令 | 说明 | 示例 |
---|---|---|
c$ 或 C | 删除至行尾,并进入Insert模式 | c$ |
c0 | 删除至行首,并进入Insert模式 | d0 |
cG | 删除至文件末尾,并进入Insert模式 | dG |
dgg | 删除至文件开头,并进入Insert模式 | cgg |
cc | 删除多行,并进入Insert模式,缺省值 1 | 3cc 向下删除 3 行 |
cw | 删除多个单词,并进入Insert模式,缺省值 1 | 3cw 向后删除 3 单词 ,至下个单词开头 |
ci" | 删除"引号内的内容", 并进入Insert模式 | 游标移动到修改所在行,键入ci" ,会自动删除就近匹配的第一个双引号内的文本 |
3.5 抽取 Y
ank
始终在
Normal
模式
命令 说明 示例 y
复制光标所在的一个字符 y
yw
复制从光标到下一个字开头的中间内容 yw
ye
复制从光标到当前字结尾的中间内容 ye
y$
复制从光标到当前行结尾的中间内容 y$
y0
复制从光标到当前行首的中间内容 y0
yy
复制光标所在一整行内容 yy
ygg
复制至文件开头 ygg
yi"
复制"引号内的内容" 游标移动到复制所在行,键入 yi"
,会复制就近匹配的第一个双引号内的文本
自定义复制:按 v
进入Visual模式,再通过 hjkl
选择内容,再按 y
对内容进行复制,最后通过 p
在合适位置进行粘贴。
3.6 粘贴 P
aste
puts (pastes):通过
yy
ye
命令复制的内容、通过dd
dw
删除的内容等,都可以通过p
将其粘贴到其他位置。
在光标字符后,粘贴内容 p
3.7 搜索 S
earch
/<search phrase>
向下搜索 n 反向搜索 N
命令 | 使用说明 | 详细描述 |
---|---|---|
/ | /目标字符串 | n: 向下搜索,下一个 N: 反向搜索,上一个 |
? | ?目标字符串 | n: 反向搜索,上一个 N: 向下搜索,下一个 |
% | 光标移动到 { [ ( 字符时, 然后键入% 字符 | 光标会移动与之对应的 } ] ) |
3.8 替换 Substitute
命令格式是:
:[range]s/{old-string|pattern}/{string}/[flags]
[range]
指定行范围,%
表示全文件1,10
表示1-10行'<,'>
可视模式选中范围{old-string|pattern}
表示旧字符串,也可以使用正则{string}
新字符串[flags]
标志,g
表示全局替换c
交互1,10
跨行可自由组合
- 单行内替换
:s/old/new
当前行,匹配到的 第一个
old,替换为new:s/old/new/g
当前行,匹配到的 所有
old,替换为new
- 跨行替换
:1,10s/old/new/g
1-10行
, 匹配到的所有old
,替换为new
:'<,'>s/old/new/g
在可视模式**选中的区域
**, 匹配到所有old
,全部替换为new
(操作步骤为:v
进入可视模式visual
, jkhl
移动光标进行区域选择, :s/old/new/g
替换)。
- 全文件替换
:%s/old/new/g
**全文件
**替换
- 交互替换(c confirm确认)
:s/old/new/c
替换时会弹出确认
,每次替换前都会询问是否替换
- 正则表达式替换(有问题)
:s/$\d\+$/[new-\1]/g
3. VIM选项设置 Set
命令格式如下::set options[x xx]
选项options:nu
number
显示行号ic
ignorecase
搜索、替换时, 忽略大小写(ic ignorecase)is
incsearch
显示搜索短语的部分匹配结果hls
hlsearch
高亮 (h
ighl
ight) 所有匹配(search
)的字符串
可以通过option前增加
no
来关闭相应option, 例如:set noic
4. 用例
4.1 批量注释代码
4.1.1 方式一:可视模式-行
+ :s 进行替换
注释代码
- 将光标移动到需要注释的代码的起始行。
- 按下
V
(大写v, 即Shift + v
) 进入可视模式(行选择模式)。 - 使用方向键(
↓
或j
)选择需要注释的多行。 - 输入以下命令之一:
- 添加单行注释:在命令模式下输入
:s/^/#/
(适用于 # 注释,如 Python、Shell 等) - 添加其他注释符号:例如,对于
//
注释(如 C/C++、JavaScript),输入:s/^/\/\//
- 添加单行注释:在命令模式下输入
取消注释
- 将光标移动到需要取消注释的代码的起始行。
- 按下
V
(大写v, 即Shift + v
) 进入可视模式,选择多行。 - 输入以下命令:
- 删除单行注释:在命令模式下输入
:s/^#//
- 删除其他注释符号:例如,对于
//
注释,输入:s/^\/\///
- 删除单行注释:在命令模式下输入
4.1.2 方式二:可视模式-列
+ I
或 A
注释代码
即,列插入
#
(I
所选列前面插入A
后面插入)
Ctrl
+v
进入列可视模式。- 使用方向键(
↓
或h j k l
)选择需要注释的所有行的首列。 - 选择好列后,按下
I
(大写 i)进入插入模式,并在所选列的前面
插入字符。 - 按下
Esc
键退出插入模式,完成插入操作。
第3步,将按下 I
改成 A
, 将在所选列的后面插入字符。
取消注释
列删除字符
#
Ctrl
+v
进入列可视模式。- 使用方向键(
↓
或h j k l
)选择需要取消注释行首#
列。 - 选择好列后,按下
x
(小写 x)或x
删除选中的所有列。
4.2 修改引号、括号内的内容
ci'
ci"
ci(
ci[
ci{
4.3 快速找到引号、括号的闭口
光标移动到 {
[
(
字符时, 然后键入%
字符 | 光标会移动与之对应的 }
]
)
4.4 列替换
Ctrl
+v
列视图 + r 替换所选列内容
Ctrl
+v
进入列可视模式。- 使用方向键(
↓
或h j k l
)选择需要取消注释行首#
列。 - 选择好列后,按下
r
(小写 r), 光标变成下划线,等待字符输入。 - 输入字符,完成替换。
4.5 跨文件内容拷贝
通过
:split <file-path>
,垂直切分,打开多个文件
vim
打开第一个文件A;- 键入
: split B-file
, 打开第二个文件; - 从源文件
y
复制字符; :wincmd j
向下切换窗口(根据目标窗口
跟当前窗口
的相对位置, 决定输入h j k l
, 也可以换成快捷键Ctrl + w + <hjkl>
)- 进入目标文件后,通过方向键移动到目标位置,
p
粘贴内容。