Vim 学习笔记(无插件)

注意:无插件 Vim 笔记。个人使用 Vim 作为 tty 编辑器和辅助开发工具配合主力 IDE 使用(IDEA Vim、VSCode Vim),为了保证通用性与便捷性,本文无插件。

Vi 作为 Unix 系统自带的编辑器,流传至今是有一定道理的。在连接进远程服务器时,并不一定能够使用 GUI 进行操作,此时又一个趁手的编辑器就尤为重要了。

那是不是会进入编辑模式,能保存文件就够用了呢?哈哈,是的,但是 Vim 的强大完全可以作为日常编辑器使用,能极大的提升开发效率(是一种以大脑空间换时间的思路),一起来看看吧!

Vim 是 Vi 的升级版本,比 Vi 多了语法高亮等更多特性。就版本而言,软件的新版本往往会修正旧版的一些缺陷和不足,所以说能用新版本尽量使用最新版本。

normal 模式

Vim 和其他编辑器不一样,并不是一打开就可以输入文字,打开 Vim 后默认为 normal 模式。当我们处于 normal 模式时,键盘上的每个按键都对应着不同的功能。

  • 当我们想要编辑内容时,我们可以使用 i 键进入 insert 模式;
  • 当我们想要保存时,可以使用 : 进入 command line 模式,然后输入 wq 命令进行保存 (write) 并退出 (quit);
  • 当我们想要搜索内容时,可以使用 / 进入 search 模式,然后键入想要搜索的内容按下 ENTER
  • 当我们想要选择某段文本时,我们可以按下 v 进入 visual 模式;

Vim modes

在其他任意模式下,按 ESC 可以回到 normal 模式。

Tips: 当你由于某种原因(比如使用网页中的 SSH 时)无法使用 ESC 键回到 normal 模式时,可以使用 Ctrl-[ 键。

Vim cheat sheet

command-line 模式

按下 : 进入命令模式,此时 Vim 底部应该出现 : 并等待进一步命令输入

Command line mode

下文中以 : 开头的命令均为 command-line 模式下的命令

命令 作用
:r! {cmd} {cmd} 的输出插入到光标处
:[range]s/pattern/target/gi 替换,在 [range] 范围内查找 pattern 然后替换为 target
:[range]g/pattern/cmd 查找,在 [range] 范围内查找 pattern 然后执行 cmd 命令
命令 `:g` 的一些例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 查看含有 pattern 的相关 5 行内容
:g/pattern/z#.5
:g/pattern/z#.5|echo "======"

# 删除含有 pattern 的所有行
:g/pattern/d

# 删除所有空行
:g/^\s*$/d

# 删除不含有 pattern 的所有行
:g!/pattern/d
:v/pattern/d

# 删除所有重复的行
:g/^\(.*\)\(\r\?\n\1\)\+$/d
:%!uniq

# 在标记 a 和 b 定义的范围内搜索含有 pattern 行中替换字符串 pattern2 为 replaced
:'a,'bg/pattern/s/pattern2/replaced/gi

# 给每一行添加一个空行
:g/^/pu =\"\n\"
:g/^/pu _ # 从黑洞寄存器 (_) 中插入

# 复制所有含有 pattern 的行到寄存器 a
:g/pattern/y a

# 复制所有含有 pattern 的行到文件末尾
:g/pattern/t$

# 移动所有含有 pattern 的行到文件末尾
:g/pattern/m$

# 从当前行到最后一行中,所有行头的数字自增 1 (相当于 normal 模式下按 `Ctrl-a`)
:.,$g/^\d/exe "normal! \<C-A>"

# 在所有匹配的行中执行寄存器 a 中的宏
:g/pattern/normal @a

command-line 模式一些实用的快捷键

按键 (command-line 模式) 作用
Ctrl-[ Ctrl-c 退出 command-line 模式,相当于按下 ESC
Ctrl-m Ctrl-j 执行命令,相当于按下 ENTER
UP / DOWN 重复上一次命令 / 回退一条
INSERT 切换插入模式和替换模式
HOME Ctrl-b 光标跳到行首
END Ctrl-e 光标跳到行尾
BACKSPACE Ctrl-h 删除光标前的字符
DELETE 删除光标处的字符
Ctrl-w 删除光标处以前的单词
Ctrl-u 删除光标处到行首
Ctrl-d 命令补全
Ctrl-r {x} 粘贴某寄存器 {x} 内容
Ctrl-r Ctrl-f 粘贴光标处的文件名
Ctrl-r Ctrl-p 粘贴光标处的文件名, expand path
Ctrl-r Ctrl-w 粘贴光标处的单词(inner)
Ctrl-r Ctrl-a 粘贴光标处的单词(around)

visual 模式

按键 作用
v 进入可视模式
V 进入行可视模式
Ctrl-v 进入列可视模式
gv 重选上次的高亮选区
Ctrl-g 在 visual 和 select 模式间替换
o 切换选区的端点

Ex 命令

在 visual 模式下直接键入 : 键可以将当前选区标记并进入 Ex 命令模式,此时可以配合一些命令达到目的。

以下命令都可只键入首字母而省略其他字符

命令 作用
:[range]print 打印指定的行在窗口底部
:[range]delete [x] 删除指定范围内的行[到寄存器 x 中]
:[range]yank [x] 复制指定范围内的行[到寄存器 x 中]
:[line]put [x] 在指定行后粘贴寄存器 x 中的内容
:[range]copy {address} :[range]t {address} 把指定范围内的行拷贝到 {address} 所指定的行之下
:[range]move {address} 把指定范围内的行移动到 {address} 所指定的行之下
:[range]join 合并指定范围内的行
:[range]normal {commands} 对指定范围内的每一行执行普通模式命令 {commands}
:[range]substitute/{pattern}/{string}/[flags] 把指定范围内出现{pattern}的地方替换为{string}
:[range]global/{pattern}/[cmd] 对指定范围内匹配{pattern}的所有行,在其上执行 Ex 命令{cmd}
range / address 作用
0 1{n} 第 n 行
$ 最后一行
. 光标所在行
'm 标记 m 所在的行
'< / '> 选区开始/结束的行
% / 1,$ 整个文件
/regexp/ 正则匹配某行
{range}+[n] / {range}-[n] 向后/前偏移 n 行,当 n 不指定时,默认为 1

工作区

Real Vim workspace

Vim workspace structure

会话 (Session)

你可以将你当前打开的 Window 和 Tab 保存成为 Session,下次读取 Session 可直接恢复上次工作区状态

命令 作用
:mksession session_file.vim 将当前工作区保存在会话中
:mksession! session_file.vim 将当前工作区保存在会话中,覆盖

然后使用 :qa:wqa 来退出 vim,下次就可以使用 vim -S session_file.vim 来恢复会话啦

标签页 (Tab)

命令 作用
:Te 打开一个新标签页
gt / gT 到下/上一个标签页
2gt 到第 2 个标签页
:tabs 查看所有标签页
:tabclose 2 关闭第 2 个标签页
:bufdo tab split 将缓冲区的文件转成 tab

窗口 (Window)

命令 作用
:E 在当前窗口打开目录
:He / :He! 在当前窗口下/上方打开目录
:Ve / :Ve! 在当前窗口右/左方打开目录
Ctrl-w v :vsp filename 左右分割窗口
Ctrl-w s :sp filename 上下分割窗口
Ctrl-w c 关闭当前窗口
Ctrl-w q 关闭当前窗口, 如果是最后一个窗口则退出 Vim
Ctrl-w w 移动光标到下一个窗口
Ctrl-w l / Ctrl-w h 移动光标到右/左边的窗口
Ctrl-w j / Ctrl-w k 移动光标到下/上边的窗口
Ctrl-w L / Ctrl-w H 移动窗口到左/右边
Ctrl-w J / Ctrl-w K 移动窗口到下/上边
Ctrl-w < / Ctrl-w > 垂直分屏向左/右调整窗口大小
Ctrl-w - / Ctrl-w + 水平分屏向上/下调整窗口大小
Ctrl-w _ / Ctrl-w | 调整窗口到最大高/宽度
Ctrl-w = 重置窗口大小

调整窗口大小的命令可以配合数字来达到重复的效果,如 Ctrl-w 10 +

缓冲区 (Buffer)

当你打开多个文件时,这些文件都保存在缓冲区中,你可以使用 :ls 查看缓冲区内容,然后使用 :buffer [n] 查看缓冲区 n 中的文件

命令 作用
:ls :buffers 查看缓冲区文件
:b {n} :buffer {n} 查看缓冲区 {n} 的文件
:bnext :bn 查看下一个缓冲区文件
:bprevious :bp 查看上一个缓冲区文件
:blast :bl 查看最后一个缓冲区文件
:bfirst :bf 查看第一个缓冲区文件

在使用 :ls 查看缓冲区内容后,可以看到文件名前有个 % 符号

符号 意义
非活动的缓冲区
a 当前被激活缓冲区
h 隐藏的缓冲区
% 当前的缓冲区
# 交换缓冲区
= 只读缓冲区
+ 已经更改的缓冲区

文件

Vim 打开后默认在 normal 模式,要进行文件操作,我们需要进入到命令模式,按下 : 进入命令模式

打开/保存/退出

命令 作用
:w 保存
:w {filename} 另存为
:1,3w {filename} 将 1-3 行另存为 filename(参考范围限定符
:1,3w >> {filename} 将 1-3 行追加到 filename 末尾
:q 退出(如果有改动则会退出失败)
:q! ZQ 抛弃修改并退出
:wq 保存并退出
:x ZZ 保存并退出(如果有修改,否则直接退出)
:cq 以非零状态(non zero)退出(如使用 vimdiff 想放弃修改时)

挂起

通过 Vim 命令

命令 作用
:!{cmd} 用来执行某一条 shell 命令。如 :!cat database.conf
:sh 进入 shell 环境。执行结束需要返回 Vim 编辑环境时,输入 exit 或按下 Ctrl-d 即可。

通过 Shell 命令

利用 Linux 作业机制,按下 Ctrl-z 将当前程序放在后台执行。然后使用 fg 命令重新回到 Vim 编辑器。 详情参考Unix 或 Linux 中&、jobs、fg、bg 等命令的使用方法

目录

可以在启动 Vim 时指定一个目录,进入 Vim 时将进入 Explore 模式. 如 vim /etc/nginx/conf.d

在 normal 模式下,键入 :E 可以打开当前文件所在目录(Explore 模式),然后可以使用 j k 选择目录

按键(在 Explore 模式下) 作用
j 选择下一个文件
k 选择上一个文件
- 前往上一级目录
R 重命名
D 删除文件
s 切换排序(name/time/size/extension)
x 执行文件

跳转

光标移动

按键(单位从小到大) 作用
h / l 光标向左/右移动
w W / b B 移动到下一个词/上一个词的开头(W B会忽略连字符)
e E 移动到当前词的末尾(E会忽略连字符)
0 / ^ / $ 移动到硬行首/软行首(缩进后)/行尾
j / k 光标向下/上移动一行
( / ) 移动到语句的开头/末尾
{ / } 移动到段落的开头/末尾
% 跳转到匹配的括号
20g :20 跳转到 20 行
zt / zz / zb 让光标所在行居于屏幕顶部/中央/底部
H / M / L 跳转到当前屏幕的顶部/中央/底部行
Ctrl-y / Ctrl-e 向上/下滚一行
Ctrl-u / Ctrl-d 向上/下翻半页 (up)
Ctrl-b / Ctrl-f 向上/下翻一整页 (backward)
gg :0 / G :$ 跳转到文件开始/末尾
\.` 跳转到光标上一次位置
'. 跳转到光标上一次位置所处的行
Ctrl-i / Ctrl-o 向前/后追溯跳转列表(jumplist)

这些操作之前都可以加上数字来控制接下来的操作执行多少次,例如按下20j向下跳转 20 行,5Ctrl-e向下滚动 5 行

文件跳转

命令 作用
:bnext :bn 查看下一个缓冲区文件

书签

marks help

跳转到书签可以使用 '\``, 书签名称可以是 a-z A-Z。书签无法直观的看到, 可以通过 :marks` 命令查看所有书签。

  • ``` 表示跳转到某书签精确到行和列
  • ' 表示跳转到某书签的软行首
  • 小写书签名 a-z 表示当前 Buffer 内的标签, 如果 Buffer 被移除, 书签会一并被删除。
  • 大写书签名 A-Z 表示全局书签
  • 数字书签名 0-9 不可直接设置,它们仅在 ‘viminfo’ 文件中存在,其中 ‘0’ 时随后一次退出 Vim 时光标的位置
命令 作用
ma 创建一个本地书签 ‘a’
'a 跳转到本地书签 ‘a’
g'a 跳转到书签 ‘a’ (不记录到 jumplist 中)
'. 跳转到最后一次执行改变的位置
m' 设置一个上下文标记
'' 到最后一次跳转之前的位置
'" 跳转到最后一次退出当前缓冲区时的光标位置
'[ 跳转到上一次修改或粘贴的位置头部
'] 跳转到上一次修改或粘贴的位置尾部
'< 跳转到上次选区时位置头部
'> 跳转到上次选区时位置尾部
:marks 显示所有书签
:marks 显示所有书签
:marks a 显示书签 ‘a’ 的详细内容
:delm[arks] a 删除书签 ‘a’
:delm[arks]! 删除所有本地书签

编辑

insert 模式

刚打开 vim 时处于 normal 模式,我们需要进入 insert 模式才可以输入内容。

按键 作用
i / a 在光标位置前面/后面进入 insert 模式
I / A 在软行首/行尾位置进入 insert 模式
o / O 在下一行/上一行新起一行进入 insert 模式
c 删除当前文本对象并进入 insert 模式
C c$ 删除到行尾进入 insert 模式
s 删除当前字符进入 insert 模式
r 用接下来的一个字符替换当前字符
R 在光标位置进入 replace 模式

replace 模式类似于 insert 模式,不同之处为 replace 模式会逐个替换光标下的字符而非插入。

在 insert 模式下,按下 ESC 退出 insert 模式回到 normal 模式

insert 模式一些实用的快捷键

按键(insert 模式) 作用
Ctrl-[ Ctrl-c 退出 insert 模式,相当于按下 ESC
Ctrl-j Ctrl-m 换行,相当于按下 ENTER
Ctrl-i 相当于按下 TAB
Ctrl-h 删除光标前的一个字符,相当于按下 BACKSPACE
DELETE 删除光标处的字符
INSERT 在 insert 模式和 replace 模式间互换
Ctrl-w 删除光标前的单词
Ctrl-u 删除当前行光标前的字符
Ctrl-a 插入上次 insert 模式下输入的字符
Ctrl-n / Ctrl-p 查找下一个 / 上一个关键字
Ctrl-t / Ctrl-d 向右 / 向左缩进一次
0 Ctrl-d / ^ Ctrl-d 删除所有缩进, 带有 ^ 的缩进删除将会在下一行恢复
Ctrl-y Ctrl-e 插入光标上一行 / 下一行对应的字符
Ctrl-o 临时执行一条 normal 模式下的命令,然后回到 insert 模式
Ctrl-r {x} 插入寄存器 {x} 中的内容
Ctrl-r Ctrl-r {x} 插入寄存器 {x} 中的内容 (Raw)
Ctrl-r Ctrl-o {x} 插入寄存器 {x} 中的内容,不进行自动缩进
Ctrl-r Ctrl-p {x} 插入寄存器 {x} 中的内容,自动缩进

insert 模式自动补全

在 insert 模式下,可以使用 Ctrl-x 进入一个子模式,用语一些复杂关键字的补全(例如复杂的函数名或文件名)

按键(insert 模式) 作用
Ctrl-x Ctrl-l 补全整行,搜索和当前行光标前字符序列相同的行
Ctrl-x Ctrl-n 补全当前文件内的关键字
Ctrl-x Ctrl-k 补全 ‘dictionary’ 的关键字
Ctrl-x Ctrl-t 补全 ‘thesaurus’ 的关键字
Ctrl-x Ctrl-i 补全当前文件和头文件内的的关键字
Ctrl-x Ctrl-f 补全文件名
Ctrl-x Ctrl-d 补全定义或宏
Ctrl-x Ctrl-v 补全 Vim 命令
Ctrl-x Ctrl-u 用户定义补全
Ctrl-x Ctrl-o 全能 (omni) 补全
Ctrl-x s 拼写建议
Ctrl-n / Ctrl-p 向前 / 向后光标前的关键字并插入

表达式寄存器

在插入模式下,键入 Ctrl-r= 会进入表达式输入模式,此时只需键入简单的算数表达式即可输入对应的值并插入到文档中。

撤销、重做

按键 作用
u 撤销
Ctrl-r 重做
. 重复上一次操作
; 重复上一次行内查找 (f/F/t/T)

复制、剪切、粘贴

在 normal 模式下按下 y 进入复制模式,按下 d 进入删除(剪切)模式。

接下来只需要跟跳转命令(如0(行首) G(文件末尾))即可操作相应的范围

需要注意的是,删除时会将移除的内容放入剪贴板。

按键 作用
yy Y 复制当前行
yG 复制到文件末尾
y$ 复制到行尾
6yy y6y 复制 6 行
ggvGy ggyG :%y 复制整个文件
dd 删除当前行
dw 删除单词末尾
x / X 向后删除字符(delete) / 退格(backspace)
10x d10l 向后删除 10 个字符 (仅限当前行)
d$ D 删除到行尾
dG 删除到文件末尾
d10G 删除当前行到第 10 行
p / P 粘贴在光标后面 / 前面
2p 粘贴 2 次
Ctrl-r {x} 在 insert 模式或命令模式下粘贴 x 寄存器的内容

你还可以在选区模式下按下 y 复制整个选区,按下 d 剪切选区

值得注意的是,vim 的剪贴板是带有寄存器(Register)的,类似历史记录功能,你可以将不同的内容复制到某一个寄存器内,粘贴时选择相应的寄存器即可。

要使用寄存器,具体的使用方法是在复制/剪切/粘贴命令前输入"x,其中 x 可以是 a-z* 还有 ",如果指定为*,则指令将会与操作系统进行交互,如果指定为 " 则会使用上一次的寄存器。

例如输入 "*p 就会把系统的剪贴板的内容粘贴到编辑器中。

文本对象 (Text Object)

Vim 的智能之处在于它知道你的内容如何进行范围的界定,通过以下命令的组合来高效的进行编辑

{command}[i|a]{scope}

command 包括 y d c

ia 区别就是是否取边界,i (inner) 不包括边界,a (around) 包括边界。

例如输入 di( 会删除当前光标处位于 () 内的内容,保留括号,如果使用 da( 则会将括号一并删去。

scope 分别有以下

按键 作用
iw iW / aw aW “word” 选择单词 (a 包括单词前后空格)
is / as “sentence” 选择句子
ip / ap “paragraph” 选择段落 (a 包括段前后空格)
it / at “tag” 选择标签 (指的是 xml/html 标签)
i( i) ib / a( a) ab “block” 选择 “()”
i{ i} iB / a{ a} aB “Block” 选择 “{}”
i[ i] / a[ a] 选择 “[]”
i< i> / a< a> 选择 “<>”
i' i" i\`` / a’ a” a`` 选择 ‘’ “” ``

举个例子,对于下面这段代码,光标位于 t 前时

1
2
3
4
{
"version": 3.0,
"content": "hello mutoe"
} ^
按键 作用
dw 删除 toe
ciw 删除 mutoe 并进入编辑模式
daw 删除 mutoe
yi" 复制 version
da" 删除 "version"
da" 删除 "version"
da{ 删除包括 {} 在内的所有内容

缩进

按键 作用
>> / << 向右/左缩进
2>> / 2<< 向右/左缩进 2 次
= 自动缩进当前行
=% 自动缩进当前代码块
gg=G G=gg 自动缩进当前文件

查找

在 normal 模式下直接按下 /?,然后输入要搜索的关键字按下回车即可。(/是向下查找,?是向上查找)

查找支持正则表达式,如果需要特殊字符,则需要 \ 转义。

查找默认大小写敏感,可以在末尾加入 \c 忽略大小写

命令 作用
/{word} 向下查找 word
?{word} 向上查找 word
* g* 查找光标所在位置的单词(g*忽略忽略单词边界)
# g# 反向查找光标所在位置的单词(g#忽略忽略单词边界)
n N 查找下/上一个(在?搜索下是相反的)
:nohighlight :nohl 取消搜索高亮显示

上面的查找是跨行的,如果你想要在行内进行查找,可以使用 f F t T 命令

命令 作用
f{x} /F{x} 查找右/左边的 {x} 字符
t{x} /T{x} 查找右/左边的 {x} 字符, 光标定位在字符左边
; , 查找下/上一个(在 F T 搜索下是相反的)

替换

在命令模式下按下:,然后输入s字符进入替换模式,相关语法如下

1
:{scope}s/{regexp}/{result}/{flag}

其中scope为替换的作用域,regexp为正则表达式,result为要替换的结果,flag 为替换标志

例如 :.,+6s/foo/bar/g 的意思为,在当前行及下 6 行的范围内(.,+6)将所有的(g)foo替换为bar

寄存器

Vim 提供了一些存放剪贴板及宏的内存区域,我们称之为 Register,也叫做寄存器。Vim 提供了 10 类共 48 个寄存器供我们使用。

你可以使用 "aY 来复制一整行到寄存器 ‘a’ 中,然后按下 "ap 来粘贴寄存器 ‘a’ 中的内容。

除了 a-z的 26 个命名寄存器,Vim 还提供了一些特殊的寄存器

寄存器 作用
"" 匿名寄存器. 使用 d c s x 时,被删除的寄存器会进入该寄存器内。
"0 0 号寄存器. 保存着被拷贝来的字符串, 当使用命名寄存器拷贝时,不会被存入该寄存器
"1 - "9 1-9 号寄存器. 保存着上次被删除的行和段落,编号为历史记录
"- 小删除寄存器. 不足一行的删除操作会被放入该寄存器内,如 dw cb dt) 等指令
"a - "z 命名寄存器. 该寄存器只有指定时才会被写入,同时录制宏时也会保存到命名寄存器中
小技巧: 使用小写字母时会替换寄存器的内容,使用大写则会追加。
": 只读寄存器. ": 存储了上次 command 模式下的命令,和 : 对应
". 只读寄存器. ". 存储了上次 insert 模式中插入的字符串,和 . 重复上次命令是一样的
"% 只读寄存器. 存储了当前文件的路径,是相对 vim 工作目录的路径
"# buffer 交替文件寄存器. 存储了当前 vim 的交替文件
"= 表达式寄存器. 当键入 "= 时会跳到命令行模式,此时可以输入任何 vim 表达式并保存到该寄存器中
"* "+ 该寄存器存放了系统的剪贴板的内容. 在 X11 系统中, "* 指鼠标拖放选中区域, "+ 指系统剪贴板
"~ 有文本拖放到 vim 中时,被拖拽的文本会存储在这里
"_ 黑洞寄存器. 所有存储到该寄存器中的内容都会消失,避免影响任何寄存器的内容
"/ 搜索模式寄存器. 存放了上一次搜索的关键词,与 / 对应

值得一提的是,任何寄存器中的值都是可以拷贝到命令模式中的。 你可以在命令模式下直接输入 "ap, 也可以在命令行模式下输入 <Ctrl-r>a 来执行。

另外,如果你想修改某寄存器的内容(比如你录制了一段很长的宏,其中有一个错误的单词或者步骤),你可以使用 vim 变量操作来修改寄存器的内容。 比如你想修改寄存器 a 的内容,你可以使用 :let @a = "new content" 来修改。 结合上面的命令,修改时你还可以粘贴当前寄存器的内容,只需在 command line 模式下按下 <Ctrl-r>a 即可。

作用域

  • .(或留空) 当前行
  • % 全文
  • ,范围
  • 1,$ 第 1 行到最后一行
  • .,+2 当前行与接下来 2 行
  • '<,'> 选区范围 (在 visual 模式下输入:会直接补全)

替换标志

替换标志可以叠加使用

  • (留空) 只替换一次
  • g 全局替换
  • i 忽略大小写
  • c 替换前确认

进行替换确认时,y n 表示替换/不替换当前位置,a q 表示替换/不替换所有,l 表示替换当前位置并退出

其他

按键 作用
~ 将光标位置的字母大小写互换
g~~ 将当前行所有字母变为大小写互换
guw / gUw 将光标位置的单词变为小/大写
guu / gUU 将当前行所有字母变为大写
ga / g8 查看光标位置字符的 ascii / utf-8
J 合并下一行
Ctrl-a Ctrl-x 将光标位置的数字自增/减 (可配合数字使用)

配置

关于配置,可以进入命令模式输入 set 来临时设置配置,也可以配置在 .vimrc 永久生效

配置名 说明
clipboard=unnamed 设置对接系统剪贴板
ignorecase 设置默认进行大小写不敏感查找
smartcase 如果有一个大写字母,则切换到大小写敏感查找
incsearch 敲键的同时搜索,按下回车把移动光标移动到匹配的词; 按下 Esc 取消搜索。
number nu 显示行数
relativenumber rnu 显示相对行数
scrolloff=5 so=5 设置滚动屏幕时上下保留的行数
wrapscan 设置到文件尾部后是否重新从文件头开始搜索

Tips

  1. 将某处内容替换可以进入选区选中要替换的内容后直接按 p 进行替换
  2. 可以使用 CTRL-[ 代替 ESC,不仅是在不方便使用 Esc 时可用,更多的在于方便按
  3. 想要跳转到当前软行首使用 0w 会比 ^

参考资料