目录
一. 三种常用模式的切换
vim 命令启动进入普通模式
普通模式 --> 按 i
(插入)或 a
(附加)-->插入模式
插入模式或命令行模式 --> 按 Esc
或者 Ctrl+[
-->普通模式
普通模式 --> 按 :
-->命令行模式 --> 输入 wq
回车后保存并退出 vim
(输入 :w <filename>
可以将文档另存为其他文件名或存到其它路径下。)
注意每次要先回到普通模式才能切换成以不同的方式进入插入模式。
二.退出vim
2.1 命令行模式下退出 vim
从普通模式输入 :
进入命令行模式,输入 wq
回车,保存并退出编辑。
以下为其它几种退出方式:
命令 | 说明 |
---|---|
:q! | 强制退出,不保存 |
:q | 退出 |
:wq! | 强制保存并退出 |
:w <文件路径> | 另存为 |
:saveas 文件路径 | 另存为 |
:x | 保存并退出 |
:wq | 保存并退出 |
2.2 普通模式下退出 vim
普通模式下按下 Shift+zz
即可保存退出 vim。
三. 删除文本
普通模式下删除 vim 文本信息
进入普通模式,使用下列命令可以进行文本快速删除:
命令 | 说明 |
---|---|
x | 删除游标所在的字符 |
X | 删除游标所在前一个字符 |
Delete | 同 x |
dd | 删除整行 |
dw | 删除一个单词(不适用中文) |
d$ 或D | 删除至行尾 |
d^ | 删除至行首 |
dG | 删除到文档结尾处 |
d1G | 删至文档首部 |
除此之外,你还可以在命令之前加上数字,表示一次删除多行,如:
2dd
表示一次删除 2 行。
四. 重复执行上次命令
4.1 重复执行上次命令
在普通模式下 .
(小数点)表示重复上一次的命令操作。
e.g:普通模式下输入 x
,删除第一个字符,输入 .
(小数点)会再次删除一个字符,除此之外也可以重复 dd
的删除操作。
4.1 执行指定次数相同的命令
进入普通模式输入 N<command>
,N 表示重复后面的次数
在普通模式下,你还可以使用 dw
或者 daw
(delete a word)删除一个单词,所以你可以很容易的联想到 dnw
(n 替换为相应数字) 表示删除 n 个单词。
五. 游标的快速跳转
普通模式下,下列命令可以让光标快速调转到指定位置,我们分别讨论快速实现行间跳转和行内跳转。
5.1 行间跳转G
命令 | 说明 |
---|---|
nG (n Shift+g) / ngg | 游标移动到第 n 行 (如果默认没有显示行号,请先进入命令模式,输入 :set nu 以显示行号) |
gg | 游标移动到到第一行 |
G (Shift+g) | 到最后一行 |
小技巧:你在完成依次跳转后,可以使用 Ctrl+o
快速回到上一次(跳转前)光标所在位置,这个技巧很实用,比如当你在写代码时,忽然想起有个 bug,需要修改,这时候你跳过去改好了,只需要按下 Ctrl+o
就可以回到你之前的位置。vim 中会用很多类似的小技巧就等着你去发掘。
5.2 行内跳转
普通模式下使用下列命令在行内按照单词为单位进行跳转:
命令 | 说明 |
---|---|
w | 到下一个单词的开头 |
e | 到当前单词的结尾 |
b | 到前一个单词的开头 |
ge | 到前一个单词的结尾 |
0 或^ | 到行头 |
$ | 到行尾 |
f<字母> | 向后搜索<字母>并跳转到第一个匹配的位置(非常实用) |
F<字母> | 向前搜索<字母>并跳转到第一个匹配的位置 |
t<字母> | 向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用) |
T<字母> | 向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用) |
六. 复制粘贴和剪切
6.1 复制及粘贴文本
-
普通模式中使用
y
复制 -
普通模式中,
yy
复制游标所在的整行(3yy
表示复制 3 行) -
普通模式中,
y^
复制至行首,或y0
。不含光标所在处字符。 -
普通模式中,
y$
复制至行尾。含光标所在处字符。 -
普通模式中,
yw
复制一个单词。 -
普通模式中,
y2w
复制两个单词。 -
普通模式中,
yG
复制至文本末。 -
普通模式中,
y1G
复制至文本开头。 -
普通模式中使用
p
粘贴 -
普通模式中,
p
(小写)代表粘贴至光标后(下) -
普通模式中,
P
(大写)代表粘贴至光标前(上)
打开文件进入普通模式练习上述命令,这会儿你就可以随意 yy
了。
6.2 剪切及粘贴
其实前面讲得 dd
删除命令就是剪切,你每次 dd
删除文档内容后,便可以使用 p
来粘贴,也这一点可以让我们实现一个很爽快的功能——交换上下行。
ddp
,就这么简单,即实现了快速交换光标所在行与它下面的行。
七. 字符的替换及撤销(Undo
替换和 Undo 命令都是针对普通模式下的操作:
命令 | 说明 |
---|---|
r +<待替换字母> | 将游标所在字母替换为指定字母 |
R | 连续替换,直到按下 Esc |
cc | 替换整行,即删除游标所在行,并进入插入模式 |
cw | 替换一个单词,即删除一个单词,并进入插入模式 |
C (大写) | 替换游标以后至行末 |
~ | 反转游标所在字母大小写 |
{n}u | 撤销一次或 n 次操作 |
U (大写) | 撤销当前行的所有修改 |
Ctrl+r | redo,即撤销 undo 的操作 |
八. 快速缩进
8.1 使用命令进行快速调整缩进操作
这一小节学习如何在 vim 中进行快速缩进,缩进操作均在普通模式下有效。
打开文件进行编辑:
vim protocols
- 普通模式下输入
15G
,跳转到 15 行 - 普通模式下输入
>>
整行将向右缩进(使用,用于格式化代码超爽) - 普通模式下输入
<<
整行向左回退 - 普通模式下输入
:
进入命令行模式下对shiftwidth
值进行设置可以控制缩进和回退的字符数
shiftwidth 命令
shiftwidth
命令是指上一节 >>
命令产生的缩进(可以简写成sw
),普通模式下输入 :
进入命令行模式下对 shiftwidth
值进行设置可以控制缩进和回退的字符数。
获取目前的设定值:
:set shiftwidth?
设置缩进为 10 个字符:
:set shiftwidth=10
输入 ESC
回到普通模式,再次尝试 >>
看缩进量是否变化。
8.2 调整文本位置
命令行模式下输入 :ce
(center)命令使本行内容居中:
:ce
命令行模式下输入 :ri
(right)命令使本行文本靠右:
:ri
命令行模式下输入 le
(left)命令使本行内容靠左:
:le
九. 查找
9.1 快速查找
普通模式下输入 /
然后键入需要查找的字符串,按回车后就会进行查找。
?
与/
功能相同,只不过 ?
是向上而 /
是向下查找。
进入查找之后,输入 n
和 N
可以继续查找。n
是查找下一个内容,N
查找上一个内容。
快速查找练习:
使用 vim 打开文件进行编辑(搜索高亮需要在配置文件 .vimrc
中设置 set hls
,实验环境中已经设置好了)。
vim protocols
- 普通模式下输入
/icmp
然后回车即可查找字符串icmp
- 普通模式下输入
n
查找下一个icmp
- 普通模式下输入
?tcp
向上查找字符串tcp
- 普通模式下输入
N
查找上一个出现的tcp
- 命令行模式下输入
noh
然后回车即可取消搜索
9.2 高级查找
- 普通模式下输入
\*
寻找游标所在处的单词 - 普通模式下输入
\#
同上,但\#
是向前(上)找,\*
则是向后(下)找 - 普通模式下输入
g\*
同\*
,但部分符合该单词即可 - 普通模式下输入
g\#
同\#
,但部分符合该单词即可
以上查找 n
,N
的继续查找命令依然可以用。
十. 多文件编辑
使用 vim 编辑多个文件
编辑多个文件有两种形式,一种是在进入 vim 前使用的参数就是多个文件。另一种就是进入 vim 后再编辑其他的文件。 同时创建两个新文件并编辑
vim 1.txt 2.txt
默认进入1.txt
文件的编辑界面
- 命令行模式下输入
:n
编辑 2.txt 文件,可以加!
即:n!
强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件 - 命令行模式下输入
:N
编辑 1.txt 文件,可以加!
即:N!
强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件
进入 vim 后打开新文件
- 命令行模式下输入
:e 3.txt
打开新文件 3.txt - 命令行模式下输入
:e#
回到前一个文件 - 命令行模式下输入
:ls
可以列出以前编辑过的文档 - 命令行模式下输入
:b 2.txt
(或者编号)可以直接进入文件 2.txt 编辑 - 命令行模式下输入
:bd 2.txt
(或者编号)可以删除以前编辑过的列表中的文件项目 - 命令行模式下输入
:e! 4.txt
,新打开文件 4.txt,放弃正在编辑的文件 - 命令行模式下输入
:f
显示正在编辑的文件名 - 命令行模式下输入
:f new.txt
,改变正在编辑的文件名字为 new.txt
恢复文件
由于在线环境无法复现此场景,请在本地尝试。
如果因为断电,终端意外关闭等原因造成文档没有保存,可以采用恢复方式。
vim 在编辑的时候会自动在当前文件目录下生成一个交换文件,一般以 <filename>.swp
的格式保存,如果有多个版本的交换文件,还可能是 .swn
,.swm
等字母。注意这个交换文件的更新不是实时的,因为实时的更新会占用磁盘,影响系统其他正常进程的速度。
当 vim 意外终止且没有保存已编辑的内容时,可以使用交换文件对文件进行恢复,注意需要在编辑这个文件的地方进行编辑,因为交换文件默认在编辑的目录生成。
例如假设 1.txt
意外关闭,我们可以输入 vim
然后输入 :recover 1.txt
。
vim
:recover 1.txt
# 出现如下提示按下回车即可恢复,如果有多个版本需要输入对应的交换文件前的数字选择要恢复的版本。
Using swap file ".1.txt.swp"
Original file "~/test/1.txt"
Recovery completed. You should check if everything is OK.
(You might want to write out this file under another name
and run diff with the original file to check for changes)
You may want to delete the .swp file now.
或者输入 vim -r
后直接选择用于恢复的文档的交换文件即可:
vim -r 1.txt
十一. 可视模式命令简介
- 在普通模式下输入
v
(小写),进入字符选择模式,就可以移动光标,光标走过的地方就会选取。再次按下 v 后就会取消选取。 - 在普通模式下输入
Shift+v
(小写),进入行选择模式,按下 V 之后就会把整行选取,您可以上下移动光标选更多的行,同样,再按一次Shift+v
就可以取消选取。 - 在普通模式下输入
Ctrl+v
(小写),这是区域选择模式,可以进行矩形区域选择,再按一次Ctrl+v
取消选取。 - 在可视模式下输入
d
删除选取区域内容 - 在可视模式下输入
y
复制选取区域内容
十二. 创建加密文档
vim -x file1
输入您的密码,确认密码,这样在下一次打开时,vim 就会要求你输入密码。
十三. 功能设定
vim 的功能设定
可以在编辑文件的时候进行功能设定,如命令行模式下输入 :set nu
(显示行数),设定值退出 vim 后不会保存。要永久保存配置需要修改 vim 配置文件。
vim 的配置文件 ~/.vimrc
(实验楼环境中配置文件在 /etc/vim/vimrc
),可以打开文件进行修改,不过务必小心不要影响 vim 正常使用。
获取目前的设定
- 命令行模式下输入
:set
或者:se
显示所有修改过的配置 - 命令行模式下输入
:set all
显示所有的设定值 - 命令行模式下输入
:set <option>?
显示 option 的设定值 - 命令行模式下输入
:set nooption
取消当前设定值
set 功能的说明
- 命令行模式下输入
:set autoindent(ai)
设置自动缩进 - 命令行模式下输入
:set autowrite(aw)
设置自动存档,默认未打开 - 命令行模式下输入
:set background=dark
或light
,设置背景风格 - 命令行模式下输入
:set backup(bk)
设置自动备份,默认未打开 - 命令行模式下输入
: set cindent(cin)
设置 C 语言风格缩进