vim基本操作

[TOC]

移动

字符移动

1
2
3
4
k 上移
h 左移
l 右移
j 下移

你也可以使用键盘上的方向键来移动,但这么做h j k l的存在就失去了意义,之所以使用h j k l来控制方向,其主要目的是让你的手不离开键盘中心,从而提高效率。

在命令前加上数字代表命令执行次数,如:5k,表示上移5行

单词移动

1
2
3
W w 移动到下一个单词开头
E e 移动到下一个单词结尾
B b 倒退到上一个单词开头

需要注意的是,E会忽略标点符号,如:I‘m,e会当成两个单词,E则不会。

同样,在命令前加上数字代表执行次数,如:2w,表示往下移动2个单词。

整行移动

1
2
3
4
0 移动到行首
$ 移动到行末
+ 移动到下一行开头
- 移动到上一行开头

j k也是移动到上一行和下一行,但它们移动的是光标所在的位置
+ -不管你的光标在何处,总是移动到下一行或上一行的行首

翻页

1
2
3
4
5
6
7
Ctrl+f 往前滚动一整屏
Ctrl+b 往后滚动一整屏
Ctrl+d 往前滚动半屏
Ctrl+u 往后滚动半屏
Ctrl+e 往后滚动一行
Ctrl+y 往前滚动一行

看似比较多,但是可以根据键盘的位置来进行记忆,并且下面两个也不常用,上面的滚屏都有一个共同点,就是会改变光标的位置,且屏幕也在改变。

滚屏

如果想让光标维持在原来的位置可以用z调整光标

1
2
3
z<Enter> 将光标所在行移动到屏幕顶端
z. 将光标所在行移动到屏幕中间
z- 将光标所在行移动到屏幕低端

980z可以将第980行移动到屏幕顶端

在屏幕中移动

有时候你其实不想滚屏,你只想在当前屏幕中移动

1
2
3
4
5
6
H 移动到屏幕顶端的行
M 移动到屏幕中央的行
L 移动到屏幕底端的行
nH 移动到屏幕顶端往下的第n行
nL 移动到屏幕顶端往上的第n行

需要注意的是:这里只是光标的位置变化,和上面两种不同

你可以用+ -j k实现同样的位置变化,只不过要操作多次而已
+ -j k的区别忘了吗?往上看看吧

在当前行移动

1
2
^ 移动到当前行的第一个非空格处
n| 移动到当前行的第n列

这里的^与上面的0通常情况下表示的位置是一样的,而n|,个人感觉还没有h l方便,慢慢的数出行数还不如直接按着h l 左右移

根据文本块移动

所谓的文本块也就是句子、段落、小节等

1
2
3
4
5
6
( 移动到当前句子开头
) 移动到下一个句子开头
{ 移动到当前这一段开头
} 移动到下一段开头
[[ 移动到当前这一节的开头
]] 移动到下一节的开头

其中,VIM以? . !等符号来标记一个句子
空白行来标记一个段落
用节宏来标记一个节(节宏是什么我还没搞清楚)

根据行号来移动

1
2
3
4
Ctrl+g 显示当前行信息
nG 转至第n行
G 转至文本末尾
gg         移至文本开头

如果你不知道当前是多少行的话就可以用Ctrl+g来查看,如果想转到第800行,可以用800G,其实z命令也可以做到,并且把光标移动到第一行。

``反引号可以返回到使用G之前的位置

插入

字符位置插入

1
2
i 在光标之前插入
a 在光标之后追加

开始用这两个就足够了,这就是最基础的

nim,可以一次插入n个m

行位置插入

1
2
3
4
A 在一行的结尾处追加
I 在一行的开头处插入
o 在光标所在位置的下一行打开新行插入
O 在光标所在位置的上一行打开新行插入

省去了移动在插入的过程

同理,n0m,可以一次在n行插入m

合并

合并行

1
J 合并两行

删除

字符删除

1
2
x 删除光标所在处字符
X 删除光标所在前字符

单词删除

1
2
3
4
5
dw 删除到下一个单词开头
de 删除到本单词末尾
dE 删除到本单词末尾包括标点在内
db 删除到前一个单词
dB 删除到前一个单词包括标点在内

行删除

1
2
3
dd 删除一整行
D或d$ 删除光标位置到本行结尾
d0 删除光标位置到本行开头

发散思维,3dd

修改

字符替换

1
2
3
r 单个字符替换
R 连续替换
~ 更改大小写

组合操作同样适用

单词修改

1
2
cw 从光标处修改到单词结尾
cb 从光标处修改到单词开头

这里直接使用cw或cb操作很简单,要注意的是加数字的使用方式,此时2cw 或者 c2w都可以使用,功能一样。

行修改

1
2
3
4
5
6
c$ 从光标修改到本行末尾
C 功能同上
c0 从光标修改到本行开头
cc 删除整行从头修改
S 功能同上
s 删除光标所在位置的字符,然后插入

复制

单词和字符复制

1
2
3
4
ynl 向右复制n个字符
ynh 向左复制n个字符
ynw 向前复制n个单词
ynb 向后复制n个单词

这里看起来并没有多大意义,因为复杂字符和单词还没有直接插入的方式来的快。

行复制

1
2
3
4
5
y0 复制到行首
y$ 复制到行末
yy 复制整行
yH 从当前行复制到屏幕顶端
yL 从当前行复制到屏幕低端

这里前两条用的也比较少,但是整行或多行复制才是yy的方便之处

4yy也就是复制4行,y几乎可以跟任何光标移动命令结合

粘贴

1
p 粘帖

剪切

剪切很简单,就是先删除,然后按p粘帖

恢复

恢复在VIM里比较简单,不过想要具体恢复到某个时间段很难,就我的经验而言,有时候使用恢复还不如删了重写。

1
2
3
4
5
u 撤消上次命令
U 恢复整行
ctrl+r 重做
. 重复
e! 全文恢复

u和ctrl+r对应的就是撤销和恢复

其中U也十分好用,它能恢复本行内容,无论你在本行做过什么,需要注意的是,你不能在别处操作多次后再回到那一行来恢复。

.重复命令

e!只要没有保存过,都能恢复

参考:
史上最全Vim快捷键键位图
Vim Cheat Sheet for Programmers
vimcolors