vim

vim

vscodevim

VIM 模式

普通 -> 插入

普通模式 —NORMAL— 转换为 插入模式 —INSERT— 的几种方法:

i 在光标前插入
I 在行首插入
o 在下一行插入
O 在上一行插入
a 在光标后插入
A 在行尾插入

插入 -> 普通

这个主要就是使用 ESC 键退出插入模式,在 VSCode 中,映射成了 jj 。

普通与可视

进入 —VISUAL— 模式:v在可视模式中再按一次 v 即可由可视模式退出到普通模式,或者直接 ESC。

普通与命令

进入命令模式::
退出命令模式:ESC

光标移动

普通模式下:

上下左右移动

h : 向左移动
j : 向下移动
k : 向上移动
l : 向下移动

单词间移动

w : 跳到下一个单词的开头
b : 跳到本单词或者上一个单词的开头(当光标在本单词的开头,则前往上一个单词的开头)
e : 跳到本单词或者下一个单词的结尾
ge : 跳到上一个单词的结尾

行首行尾移动

0 : 跳到行首
^ : 跳到从行首开始的第一个非空字符
$ : 跳到行尾
gg : 跳到第一行
G : 跳到最后一行
nG : 跳到第 n 行
:n : 跳到第 n 行

通过当前行字符跳转光标

f{char} : 光标跳到下个 {char} 所在位置
F{char} : 反向移动到上一个 {char} 所在位置
t{char} : 光标跳到下一个 {char} 的前一个字符的位置
T{char} : 光标跳到下一个 {char} 的后一个字符的位置
; : 重复上次的字符查找命令
, : 反向查找上次的查找命令

其他

Ctrl + d : 向下滚动半屏
Ctrl + u : 向上滚动半屏

zt 将当前行置于屏幕顶部附近
zz 将当前行置于屏幕中央
zb 将当前行置于屏幕底部

H 跳转到屏幕的顶部
M 跳转到屏幕的中间
L 跳转到屏幕的底部

( 跳转到上一个句子
) 跳转到下一个句子
{ 跳转到上一个段落
} 跳转到下一个段落

操作符(operator)

普通模式下:

d : 删除(delete)
c : 修改(删除并进入插入模式)(change)
y : 复制(yank)
v : 选中并进入 VISUAL 模式
操作符的简单用法:
dd : 删除一整行。类似的还有 cc、yy。 Ndd : 其中 N 表示的是数字,例如 2dd 表示删除两行(向下执行),同样还有 Ncc、Nyy。

小 tip: d 和 c 附带剪切效果,也就是可以用 p 复制删除的内容。

动作 motion

i(inner) 和 a(around) 的区别

i + object : 内部文本对象
a + object : 外部文本对象 简单的说就是,i 不包括包围文本对象的空白或者括号等,er a 包括了包围文本对象的空白或者括号等。

基本的使用

iw / aw
i( / a( 或 ib / ab
i{ / a{ 或 iB / aB
i” / a”
i’ / a’
i` / a`
i< / a<
i[ / a[

操作符跟动作的结合

结合跳转的一些例子:

y$ : 复制当前位置到行尾的所有内容
dw : 删除当前位置到下一个单词的开头
c} : 修改当前位置到这个段落的结尾
d( : 删除到句子的开头
结合数字的一些例子:

y2h : 向左拷贝两个字符
d2w : 删除后两个单词
c2j : 修改后面两行
结合 i 和 a 的一些例子:

di( : 删除括号内的内容

di{ : 删除大括号内的内容

diw : 删除光标所在的单词

da( : 删除括号和括号内的内容

da{ : 删除大括号和大括号内的内容

daw : 删除光标所有的单词以及周围的空白

df\ : 删除到下一个 char 字符

切换大小写

~ : 将光标下的字母改变大小写
3~ : 将光标位置开始的 3 个字母改变其大小写
g~~ : 改变当前行的大小写
gUU : 将当前行的字母改为大写
guu : 将当前行的字母改成小写
gUaw(gUiw) : 将光标下的单词改成大写
guaw(guiw) : 将光标下的单词改成小写

其他

u : 撤销
Ctrl + r : 恢复撤销
p : 粘贴
x : 删除当前光标所在的字符
r : 替换当前光标所在的字符

tips

一些使用 VSCode 开发中常用的操作:

函数定义之类:
gd : 进入函数定义
Ctrl+o : 从函数定义中返回
gh : 查看函数参数等信息
切换标签页:
gt : 切换到下一个标签页
gT : 切换到上一个标签页
4gt : 切换到第 4 个标签页
其他: 可以使用 Ctrl + 0 来将光标从编辑器跳转到文件栏,在文件栏可以使用 j 和 k 进行移动,可以使用 Space 展开或者关闭文件夹,使用 l 可以将光标选中的文件在编辑器中打开。
还有如果使用侧边栏打开文件,可以使用 Ctrl + 1 跟 Ctrl + 2 实现跳转。

值得记住的组合拳

xp : 调换相邻的两个字符
ddp : 调换相邻的两行 这种组合拳最好是形成肌肉记忆,而不是去试图理解它的意思。

easymotion

VSCode 的 VIM 插件默认将 \ 设为 Space.

\\ s \ : 搜索 char 字符
其他的一些操作可以查看 VSCode 的 VIM 插件的介绍页

vim-surround

ds” : 删除两侧的 “
y s \ \ : 通过 motion 在指定内容两侧增加字符
cs”‘ : 把两侧的 “ 改为 ‘

更改匹配项

:s/dog/cat/ 替换当前行第一个dog为cat
:s/dog/cat/g 替换当前行所有dog
:n,$s/dog/cat/ 替换从第n行到最后一行每行中的第一个dog为cat
:n,$s/dog/cat/g 替换从第n行到最后一行每行中的所有的dog为cat
:%s/dog/cat/ 替换全文每行中的第一个dog为cat
:%s/dog/cat/g 替换全文每行中的所有的dog为cat

Vsvim

自带命令

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
1.normal模式下
1.移动
.基本移动
hjkl
.单词移动
w:word "跳转到下一个单词的头"
W:WORD 转到下个空格后单词的头
e:word's end "跳转到这个单词的结尾"
E:WORD's end 下个空格前
ge:word's end "跳转到上一个单词的结尾"
gE:WORD's end
b:back "跳转到单词的头"
B:back "跳转到WORD的头"
.行移动
_ ^: 跳转到行的第一个字符
0: 跳转到行首
$: 跳转到行的最后一个字符
.缩进行
>> :向右缩进(原Tab)
<< :向左缩进
.段落移动:
{: 向上移动一个段落
}: 向下移动一个段落
[[:文件首部
]]:文件尾部
.屏幕移动
gg: 跳转到文件首部
G: 跳转到文件结尾
12gg: 跳转到第12行
zz: 当前光标移动到屏幕最中央
zt: 当前光标移动到屏幕最上方(top)
zb: 当前光标移动到屏幕最下方(bottom)
c-f: 下翻半页
c-u: 上翻半页
2.进入插入模式
i: 插入到光标前
I: 插入到行的最前面
a: 插入到光标后
A: 插入到行的最后面
s:删除光标下的字符,并进入插入模式
S:删除当前行所有字符,并进入插入模式
ce/cw: 删除当前光标到word末尾处的字符,进入插入模式
C:删除当前光标后的所有字符,并进入插入模式

o:插入到下一行
O:插入到上一行
3.撤销和reDo
u: 撤销
c-r: redo
4.替换
r: 用输入替换光标下的字符
R:进入替换模式
5.查找:
.单行
f{char}: 从当前光标向后查找char。
F{char}: 从当前光标向前查找char
t{char}: 从当前光标向后查找char,光标落到char之前
T{char}: 从当前光标向前查找char,光标落到char之后
; :下一个char
, :上一个char
.整个文件中查找
/ : 从当前行向下查找
? : 从当前行向上查找
* : 从当前向下,查找当前光标下的word
# : 从当前向上,查找当前光标下的word
n : 下一个查找结果
N : 上一个查找结果
6.删除
x:剪切当前光标下的字符
X:剪切当前光标前的一个字符

d{motion}:删除
dl: 删除当前光标下的一个字符
de/dw: 删除当前光标下到word end的字符 dw会删除后面的空格
db: 删除当前光标下,到word head的字符
D: 删除当前光标下到行尾的字符
7.复制
y{motion}:复制
yl: 复制当前光标下的一个字符
yy/Y:复制当前行
ye/yw: 复制当前光标到word end的字符
yb:复制当前光标前一字符到word head的字符
8.粘贴
p:粘贴到当前光标后
P:粘贴到当前光标前

9.点范式(.)
. :重复上次的修改(移动,删除,增加)
10.组合命令
yyp:复制当前行到下一行
ddp:和下一行交换(删除当前行,复制到下一行)
xp:交换两个chr的位置

yi(:复制括号()中的内容 yi{ yi[ yi" yi'
di(:删除括号()中的内容 di{ di[ di" di'
%:跳转匹配的{}、()、[]
11.修改文本
J:将光标所在的下一行和本行连接,并且中间隔一个空格
gJ:将光标所在的下一行和本行连接(下一行的空格也连接)


2.insert模式下
c-o:暂时进入normal模式。一次命令后,回到插入模式。


3.visual模式(visual(可视行,可视块))),select(选择))
normal模式进入可视模式:
v:字符可视模式
V:行visual
c-v:块visual
退出可视模式:
行/块visual v-> visual v-> normal
字符可视模式 v ->normal
<esc> or <c-[>
块模式下插入:
c-V:进入块模式,并选择好区域
I 在所选区域前,进入块插入模式(插入的内容会在所有列都插入)
A 在所选区域后,进入块插入模式(插入的内容会在所有列都插入)
c 删除所选区域内容,并进入块插入模式(插入的内容会在所有列都插入)
C 删除所选区域以及所选区域后的所有内容,并且进入块插入模式(插入的内容会在所有列都插入)
<esc> 退出到normal模式

c-g:切换可视模式和选择模式

可用命令:
移动:hjkl
查找:f{char} ; , n/N
删除:c C d x s
其他命令:
o: 切换选中区域的首和尾
U: 选中的字符全部大写
u: 选中的字符全部小写
~:选中的字符切换大小写

组合命令:
ve/vw/viw:选中一个单词
vu:光标下的字符小写
vU:光标下的字符大写
veu/U:选中一个单词小写/大写


4.command模式
在normal模式或者visual模式下输入冒号:,进入命令模式
normal模式下的命令,可以在命令模式下运行
command下也可以运行ex命令
:com[mand] 列出所有用户自定义的命令
基本命令:
:w[a] [全部]写入(保存)
:q[a] [全部]退出
:c[a] [全部]关闭buffer
:x[a] [全部]和:wq类型,当文件有修改时候,会写入

:[range]copy/co/t {address} 将范围内的行复制到目标地址处 {address}使用符号
:[range]move {address} 将范围内的行移动到目标地址处

:normal 命令,在命令行中执行normal模式下的命令
如果是visual模式,会呈现
:'<,'>normal 会在每一行都执行命令


5.命令范围
.command模式下
vim中,在单个文件中,
1.以行号为地址
2.此外,还有一些特殊符号表示地址,例如:
% 整个文件(:1,$的简写形式)
. 光标所在位置。当前位置
1 文件第一行
$ 文件最后一行
0 虚拟行,位于文件第一行上方
'm 包含标记m的行
'< 高亮选区的起始行
'> 高亮选区的结束行

范围的表示用逗号隔开,例如 add1,add2
:12,15d 表示删除12行到15行内容
:[range]d[elete] [x] {count} "x到代表寄存器x里"
.normal模式下
normal中的一些命令,可以指定运行次数,例如:
2dd 运行两次dd->删除两行
2yy 运行两个yy->复制两行

6.mark和跳转
mx:添加本文件"书签"x
mX:添加全局"书签"X
`x:跳转到书签x所在的行和列
'x:跳转到书签x所在行
``:跳转到本文件上次离开的位置
gi:跳转到上一次插入的位置
gv:跳转到上一次进入visual的位置

7.其他


:help [ index帮助文档中,所有命令

vim

_vsvimrc

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
"重要配置
:set backspace=indent,eol,start "退格键设置"
:set clipboard=unnamed "默认的剪切寄存器 共享系统剪切板"
:set ignorecase "vim忽略大小写"
:set nohlsearch "关闭高亮搜索的关键字"

"单文件:
:inoremap jk <Esc>
:nnoremap <space> za "折叠"

" Navigation
:nnoremap `. :vsc View.QuickActionsForPosition<CR>
:nnoremap `` :vsc Edit.GoToAll<CR>
:nnoremap `i :vsc Edit.GoToImplementation<CR>
:nnoremap `d :vsc Edit.GoToDefinition<CR>
:nnoremap `l :vsc Edit.GoToDeclaration<CR>
:nnoremap `r :vsc Edit.FindAllReferences<CR>
:nnoremap `q :vsc Edit.QuickInfo<CR>
:nnoremap `p :vsc Edit.PeekDefinition<CR>
:nnoremap `f :vsc Edit.FormatDocument<CR>

:nnoremap `s :vsc File.SaveAll<CR>
:nnoremap `x :vsc File.Close<CR>
:nnoremap `o :vsc File.OpenContainingFolder<CR>


" Errors - `eX
:nnoremap `ee :vsc View.ErrorList<CR>
:nnoremap `en :vsc View.NextError<CR>
:nnoremap `ep :vsc View.PreviousError<CR>

" comment
:nnoremap `cc :vsc Edit.ToggleComment<CR>
:nnoremap `cl :vsc Edit.ToggleLineComment<CR>

" Build - `bX
:nnoremap `bb :vsc Build.BuildSolution<CR>
:nnoremap `bc :vsc Build.CleanSolution<CR>
:nnoremap `br :vsc Build.RebuildSolution<CR>
:nnoremap `bs :vsc Debug.Start<CR>
:nnoremap `bw :vsc Debug.StartWithoutDebugging<CR>
:nnoremap `bq :vsc Debug.StopDebugging<CR>

" Tests - `tX
:nnoremap `ta :vsc TestExplorer.RunAllTests<CR>
:nnoremap `tt :vsc TestExplorer.RunAllTestsInContext<CR>
:nnoremap `tc :vsc TestExplorer.RunAllTestsInContext<CR>
:nnoremap `ts :vsc TestExplorer.RunSelectedTests<CR>
:nnoremap `td :vsc TestExplorer.DebugAllTestsInContext<CR>
:nnoremap `tf :vsc TestExplorer.RunFailedTests<CR>

"end
"source ~/vsvimrc "读取filefullPath的配置内容,并运行"

vs自带快捷键

F9 断点

×

喜欢就点赞,疼爱就打赏