vim初学-基础快捷键

最近在学Vim,确实是一个非常好用的编辑器,因为所有的操作都是通过键盘来实现的。
以前使用其他编辑器的时候经常会不断使用鼠标来完成一些操作,这就导致了右手一直在键盘和鼠标之间挪动,而且每次从鼠标挪回键盘时都会出现右手不知道放在键盘哪个位置的情况,所以就要么使劲摸j键上面的那个点,要么就是眼睛看一下键盘。虽然都不是什么大问题,但是频繁的变化真的会打乱思维。所以现在决定要好好学一下Vim。

正因为Vim的操作都可以通过键盘实现,所以Vim的快捷键非常多,在初学的过程中就记了很多基本的快捷键,现在在博客上分享一下,也方便我以后想用的时候速查。


Normal Mode

指针移动

基础移动

hjkl -> 左下上右

横向移动

w -> 移到下一个单词的开头,以空格和特殊字符划分
W -> 移到下一个单词的开头,以空格划分
b -> 上一个…
B -> 上一个…

e -> 移到下一个单词的结尾,以空格和特殊字符划分
Ee -> 移到下一个单词的结尾,以空格划分
ge -> 上一个…
gE -> 上一个…

f + … -> 移到本行下一个输入的字符上
F + … -> 移到本行上一个输入的字符上
t + … -> 移到本行下一个输入的字符前
T + … -> 移到本行上一个输入的字符前

(f + …)搜索后
; -> 重复搜索下一个
, -> 重复搜索上一个

0 -> 移到当前行第一个字符
^ -> 移到当前行第一个非空白字符
$ -> 移到当前行最后一个字符
g_ -> 移到当前行最后一个非空白字符

纵向移动

} -> 向下移动一段
{ -> 向上移动一段

CTRL + D -> 向下滚动半页
CTRL + U -> 向上滚动半页

/ + … -> 从前往后搜索
? + … -> 从后往前搜索

(搜索后)
n -> 下一个
N -> 上一个
再次按下 / 或 ?使搜索改变方向,同时n也变反向

gn -> 到下一个并选住搜索匹配项
gN -> 到上一个…

移动前可加数字,表示执行多少次

其他移动

gd -> 转到定义(definition)
gf -> 转到所引入的文件(file)

gg -> 文件最前面
{line} + gg -> 转到指定行
G -> 文件最后尾
% -> 转到所匹配的括号

CTRL + o -> 回到刚才位置

编辑操作

操作

d -> 删除 (其实是剪切,下同)
d2d -> 删除2个单词
dt; -> 删到;前

dd -> 删除一行
D -> 从光标处删到结尾 = d$

u -> 撤销
CTRL + R -> 重做

c -> 删除并进入编辑模式(d + i)
cc -> 删除一行并…
C -> 从光标处删除到结尾…

. -> 重复上一个操作

y -> 复制
yy -> 复制一行
Y -> 复制一行 (= yy)

p -> 粘贴到光标前, 复制一行后会在下一行粘贴
P -> 粘贴到光标后, 复制一行后会在上一行粘贴
gp -> 粘贴到光标后并把光标移到粘贴后的后一位
gP -> 光标前…的后一位

g~ -> 改变大小写
gu -> 变小写
gU -> 变大写
‘>’ -> 增加缩进
< -> 减少缩进
= -> 格式化代码

CTRL + W + s -> 上下分屏
CTRL + W + v -> 左右分屏

简化版操作

x -> 删除当前光标(dl)
X -> 删除当前光标前一个(dh)
s -> 改变当前光标,并进入编辑(ch)
r -> 改变当前光标,不进入编辑

寄存器

“ + (0 - 9) | (a - z) -> 切换到指定寄存器

“ -> 匿名寄存器
a-z -> 可指定寄存器
0 -> 复制寄存器,保存上一次复制
1-9 -> 剪切寄存器,保存前9次删除(剪切)

切换到寄存器后, 复制操作会将内容复制进寄存器里
(指定寄存器时使用寄存器名的大写,会将内容追加到当前寄存器里的后面)

:reg -> 查看当前所有寄存器内容
:reg + 0-9/a-z -> 查看指定寄存器内容

前缀

a -> (around)
i -> (inner)

范围

w -> word
s -> sentence
p -> paragraph
“ -> quote
t -> <>标签
( -> () (or b)
{ -> {} (or B)
[ -> []

操作 + 前缀 + 范围 的方式能使单词操作更具有可重复性


Insert Mode

进入编辑

i -> 光标前插入
a -> 光标后追加
I -> 插入行首
A -> 追加行尾

o -> 当前光标下面新建一行
O -> 当前光标上面新建一行

在编辑模式中

CTRL + h -> 向左删一个字符
CTRL + w -> 向左删一个词
CTRL + u -> 向左删一行

CTRL + R + 寄存器名称 -> 粘贴

退出编辑

ESC
CTRL + c
CTRL + [

选择模式

v -> 字符选择
V -> 行选择
CTRL + V -> 块选择

命令模式

命令基本特征

: -> 开启命令模式
{command} + ! -> 强制执行

命令可叠加:
:wall (:wa) -> 保存全部
:qall (:qa) -> 退出全部
:wqall (:wqa) -> 保存并退出全部
:qall! (:qa!) -> 强制退出全部

基本命令

:edit + {path + filename} -> 创建新文件(不加路径就是当前文件所在的路径,默认相对路径)(short => :e)
:write -> 保存(short => :w)
:quit -> 退出(short => :q)

:delete (:d) -> 剪切
:10,12d a -> 删10 11 12行,存到寄存器a
. -> 当前行
+2 -> 当前行下2行
% -> 整个文件
0 -> 文件开头
$ -> 文件结尾
:’<,’>d ->删除选中 (选择模式选中后按下:会自动加上)

:yank
:put
:copy
:move

@: -> 重复上个命令
@@ -> 重复上个命令

:substitute (:s) -> 替换
:s/aa/bb -> 当前行第一个 aa换成bb
:s/aa/bb/g -> 当前行全部 …
:%s/aa/bb/g -> 整个文件全部…
options(最后一个参数):
g -> 全局
i -> 忽略大小写
c -> 每次要确认

:sp {相对路径} -> 上下分屏
:vsp {相对路径} -> 左右分屏
分屏后:
CMD + p (CTRL + p)-> 选择另一个文件
CTRL + w + hjkl -> 选择窗口

:tabnew {file} -> 新建标签页
:tabn (:tabnext) -> 下一个标签页
:tabp (:tabprevious)-> 上一个标签页
:tabo (:tabonly) -> 关闭其他标签页

一些有用的键盘映射

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
{
"vim.leader": "<Space>",
"vim.insertModeKeyBindingsNonRecursive":[
// jk退出输入
{
"before" : ["j", "k"],
"after" : ["<ESC>"]
}
],
"vim.normalModeKeyBindingsNonRecursive":[
// 快速移动
{
"before": ["J"],
"after": ["5", "j"]
},
{
"before": ["K"],
"after": ["5", "k"]
},
// 上面改掉了J的功能(合并两行),这边改成其他方式
{
"before": ["<Leader>", "j"],
"after": ["J"]
},
// 分屏后切换窗口
{
"before": ["<C-h>"],
"after": ["<C-w>", "h"]
},
{
"before": ["<C-j>"],
"after": ["<C-w>", "j"]
},
{
"before": ["<C-k>"],
"after": ["<C-w>", "k"]
},
{
"before": ["<C-l>"],
"after": ["<C-w>", "l"]
},
// 切换标签页
{
"before": ["<Leader>", "t", "t"],
"commands": [":tabnew"]
},
{
"before": ["<Leader>", "t", "n"],
"commands": [":tabnext"]
},
{
"before": ["<Leader>", "t", "p"],
"commands": [":tabprev"]
},
{
"before": ["<Leader>", "t", "o"],
"commands": [":tabo"]
},
// 取消搜索高亮
{
"before": ["<leader>", "/"],
"commands": [":noh"]
},
// 保存 打开编辑菜单等(仅在vscode中有效)
{
"before": ["<leader>", "w"],
"commands": ["workbench.action.files.save", ]
},
{
"before": ["<leader>", "p"],
"commands": ["workbench.action.showCommands", ]
},
{
"before": ["<leader>", "t"],
"commands": ["workbench.action.gotoSymbol", ]
},

],
}
作者

Jhuoer Yen

发布于

2021-10-25

更新于

2023-09-18

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×