Vim学习
Vim模式
Vim 具有 6 种基本模式和 5 种派生模式,先学三种
- 普通模式(Normal mode)
在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是 Vim 启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。
- 插入模式(Insert mode)
在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。
在插入模式中,可以按
ESC
键回到普通模式。
- 命令行模式(Command line mode)
在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(
:
键),搜索(/
和?
键)或者过滤命令(!
键)。在命令执行之后,Vim 返回到命令行模式之前的模式,通常是普通模式。
编辑基本操作
-
Esc键进入普通模式
-
命令行模式中输入
wq
回车后保存并退出 vim -
:
进入命令行模式,输入w
回车,保存文档,输入:w <filename>
可以将文档另存为其他文件名或存到其它路径下。 -
命令行模式后输入
:e <filepath>
可以打开相应文件 -
按下
i
键进入插入模式 -
普通模式下
按键 说明 h
左 l
右(小写 L) j
下 k
上 w
移动到下一个单词 b
移动到上一个单词 命令 说明 i
在当前光标处进行编辑 I
在行首插入 A
在行末插入 a
在光标后插入编辑 o
在当前行后插入一个新行 O
在当前行前插入一个新行 cw
替换从光标所在位置后到一个单词结尾的字符
退出vim
从普通模式输入 :
进入命令行模式,输入 wq
回车,保存并退出编辑。(先掌握这个)
以下为其它几种退出方式:
命令 | 说明 |
---|---|
:q! |
强制退出,不保存 |
:q |
退出 |
:wq! |
强制保存并退出 |
:w <文件路径> |
另存为 |
:saveas 文件路径 |
另存为 |
:x |
保存并退出 |
:wq |
保存并退出 |
普通模式下退出 vim
普通模式下按下 Shift+zz
即可保存退出 vim。
删除文本
进入普通模式,使用下列命令可以进行文本快速删除:
命令 | 说明 |
---|---|
x |
删除游标所在的字符 |
X |
删除游标所在前一个字符 |
Delete |
同 x |
dd |
删除整行 |
dw |
删除一个单词(不适用中文) |
d$ 或D |
删除至行尾 |
d^ |
删除至行首 |
dG |
删除到文档结尾处 |
d1G |
删至文档首部 |
除此之外,可以在命令之前加上数字,表示一次删除多行,如:
2dd
表示一次删除 2 行
d2w
表示删两个单词
vim 重复命令
- 普通模式下
.
(小数点)表示重复上一次的命令操作 - 普通模式输入
N<command>
,N 表示重复后面的次数,表示重复几次命令
游标的快速跳转
行间跳转
命令 | 说明 |
---|---|
nG (n Shift+g) / ngg |
游标移动到第 n 行 (如果默认没有显示行号,请先进入命令模式,输入 :set nu 以显示行号) |
gg |
游标移动到到第一行 |
G (Shift+g) |
到最后一行 |
小技巧:你在完成依次跳转后,可以使用 Ctrl+o
快速回到上一次(跳转前)光标所在位置
行内跳转
普通模式下使用下列命令在行内按照单词为单位进行跳转:
命令 | 说明 |
---|---|
w |
到下一个单词的开头 |
e |
到当前单词的结尾 |
b |
到前一个单词的开头 |
ge |
到前一个单词的结尾 |
0 或^ |
到行头 |
$ |
到行尾 |
f<字母> |
向后搜索<字母>并跳转到第一个匹配的位置(非常实用) |
F<字母> |
向前搜索<字母>并跳转到第一个匹配的位置 |
t<字母> |
向后搜索<字母>并跳转到第一个匹配位置之前的一个字母(不常用) |
T<字母> |
向前搜索<字母>并跳转到第一个匹配位置之后的一个字母(不常用) |
复制粘贴和剪切
复制及粘贴文本
- 普通模式中使用
y
复制 - 普通模式中,
yy
复制游标所在的整行(3yy
表示复制 3 行) - 普通模式中,
y^
复制至行首,或y0
。不含光标所在处字符。 - 普通模式中,
y$
复制至行尾。含光标所在处字符。 - 普通模式中,
yw
复制一个单词。 - 普通模式中,
y2w
复制两个单词。 - 普通模式中,
yG
复制至文本末。 - 普通模式中,
y1G
复制至文本开头。 - 普通模式中使用
p
粘贴 - 普通模式中,
p
(小写)代表粘贴至光标后(下) - 普通模式中,
P
(大写)代表粘贴至光标前(上)
剪切及粘贴
其实 dd
删除命令就是剪切,每次 dd
删除文档内容后,便可以使用 p
来粘贴,也这一点可以实现一个很爽快的功能——交换上下行。
ddp
,就这么简单,即实现了快速交换光标所在行与它下面的行。
Vim 查找替换
字符的替换及撤销(Undo 操作)
替换和撤销(Undo)命令
替换和 Undo 命令都是针对普通模式下的操作:
命令 | 说明 |
---|---|
r +<待替换字母> |
将游标所在字母替换为指定字母 |
R |
连续替换,直到按下 Esc |
cc |
替换整行,即删除游标所在行,并进入插入模式 |
cw |
替换一个单词,即删除一个单词,并进入插入模式 |
C (大写) |
替换游标以后至行末 |
~ |
反转游标所在字母大小写 |
{n}u |
撤销一次或 n 次操作 |
U (大写) |
撤销当前行的所有修改 |
Ctrl+r |
redo,即撤销 undo 的操作 |
快速缩进
- 普通模式下输入
>>
整行将向右缩进(用于格式化代码) - 普通模式下输入
<<
整行向左回退 - 普通模式下输入
:
进入命令行模式下对shiftwidth
值进行设置可以控制缩进和回退的字符数
获取目前的设定值:
:set shiftwidth?
设置缩进为 4 个字符:
:set shiftwidth=4
set ts=4
设置tab缩进为4格
调整文本位置
命令行模式下输入 :ce
(center)命令使本行内容居中:
:ce
命令行模式下输入 :ri
(right)命令使本行文本靠右:
:ri
命令行模式下输入 le
(left)命令使本行内容靠左:
:le
查找
快速查找
普通模式下输入 /
然后键入需要查找的字符串,按回车后就会进行查找。?
与/
功能相同,只不过 ?
是向上而 /
是向下查找。
进入查找之后,输入 n
和 N
可以继续查找。n
是查找下一个内容,N
查找上一个内容。
命令行模式下输入 noh
然后回车即可取消搜索
高级查找
- 普通模式下输入
\*
寻找游标所在处的单词 - 普通模式下输入
\#
同上,但\#
是向前(上)找,\*
则是向后(下)找 - 普通模式下输入
g\*
同\*
,但部分符合该单词即可 - 普通模式下输入
g\#
同\#
,但部分符合该单词即可
功能设置
-
命令行模式下输入
: set cindent(cin)
设置 C 语言风格缩进 -
命令行模式下输入
:set
或者:se
显示所有修改过的配置 -
命令行模式下输入
:set autoindent(ai)
设置自动缩进 -
:set nu
(显示行数)