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 模式;
在其他任意模式下,按 ESC 可以回到 normal 模式。
Tips: 当你由于某种原因(比如使用网页中的 SSH 时)无法使用 ESC 键回到 normal 模式时,可以使用
Ctrl-[
键。
command-line 模式
按下 :
进入命令模式,此时 Vim 底部应该出现 :
并等待进一步命令输入
下文中以
:
开头的命令均为 command-line 模式下的命令
命令 | 作用 |
---|---|
:r! {cmd} |
将 {cmd} 的输出插入到光标处 |
:[range]s/pattern/target/gi |
替换,在 [range] 范围内查找 pattern 然后替换为 target |
:[range]g/pattern/cmd |
查找,在 [range] 范围内查找 pattern 然后执行 cmd 命令 |
命令 `:g` 的一些例子
1 | # 查看含有 pattern 的相关 5 行内容 |
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 |
工作区
会话 (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 |
查看下一个缓冲区文件 |
书签
跳转到书签可以使用 '
和 \``, 书签名称可以是 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 模式下,按下
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
i
和 a
区别就是是否取边界,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 | { |
按键 | 作用 |
---|---|
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
- 将某处内容替换可以进入选区选中要替换的内容后直接按
p
进行替换 - 可以使用
CTRL-[
代替 ESC,不仅是在不方便使用 Esc 时可用,更多的在于方便按 - 想要跳转到当前软行首使用
0w
会比^
快
参考资料
- Vim Tips Wiki
- Linux vim - Runoob
- Vim - Harttle Land
- 技巧:快速提高 Vi/Vim 使用效率的原则与途径 - 方吾松
- You don’t need more than one cursor in vim - @schoteffel
- Vim 全局命令 g - Ein Verne’s Blog
- Vim Text Objects: The Definitive Guide - Carbon Five’s Blog
- Vim: Jump Back To Previous or Last Cursor Position - nixCraft
- Vim 批量插入数字序列
- 无插件 Vim 编程技巧 - 陈浩
- vim/gvim 有哪些实用技巧? - 知乎 (感谢所有回答者)