大小写敏感
这是一个你不需要使用鼠标,不需使用小键盘,只需要使用大键盘(87)就可以完成很多复杂功能文本编辑的编辑器
配置vs code vim以禁用其某些快捷键,能够能好得使用它
模式
-
[ESC]
→ Normal ,可以使用快捷键命令,或按:输入命令行。 -
i
,I
,o
,O
,a
,A
→ Insert ,插入模式,可以输入文本 -
v
→ Visual ,可视模式,移动光标可以选择文本-
V
→ Visual line , 可视行模式, 总是整行整行的选中 -
<C-v>
→ Visual block ,可视块模式,可以完成多行同时操作
-
-
R
→ Replace 替换模式,正常模式下,按R进入。
-
:wq
→ 存盘 + 退出 (:w
存盘,:q
退出) (:w 后可以跟文件名 -
.
→ 重复上一个命令 -
3.
→ 重复 3 次上一个命令,在很多情况下都可以使用数字重复执行命令 -
:help <command>
→ 显示相关命令的帮助。你也可以就输入:help
而不跟命令。(退出帮助需要输入:q)
各种进入插入模式的方式
-
i
→ 在光标前插入 -
I
→ 行首插入 -
a
→ 在光标后插入 -
A
→ 行尾插入 -
o
→ 在当前行后插入一个新行 -
O
→ 在当前行前插入一个新行 -
s
→ 删除光标所在处字符,并进入插入模式 -
S
→ 删除光标所在的行,并进入插入模式
复制 粘贴
-
yy
或Y
→ 拷贝当前行 -
<line>yy
→ 拷贝从 光标所在行 到 第n行 的内容 -
p
→ [paste] 粘贴剪贴板 (p是表示在当前光标之后,P表示在之前) -
2p
→ 粘贴文本2次 -
3iword[ESC]
→ 会写下"wordwordword", 重复3次world
在vs code vim中可以通过设置
"vim.useSystemClipboard":true
使用系统的剪贴板 (默认使用vim自己的临时缓冲区)
删除文本
删除的内容将会存到剪贴板里
x
→ 删当前光标所在的一个字符dd
→ 删除当前行2dd
→ 删除2行d
→ [delete] 在选择模式下,删除选择内容dt<char>
→ 删除所有的内容,直到遇到匹配字符,不包括匹配字符dw
→ 删除光标所在的字符至单词结束的内容,例如str = (*this)
光标在h,将会删除his,更多命令看下面 可视化选择组合c<move>
→ 删除并进入插入模式,<move>
可以是任何移动光标的命令,如ciw
,cf<char>
<C-h>
→ 在插入模式,删除前一个字符<C-w>
→ 在插入模式,删除前一个单词<C-u>
→ 在插入模式,删除前面一行所有字符
简单的移动光标
-
h
,j
,k
,l
→你也可以使用光标键 (←↓↑→) -
0
→ 数字零,到行头 -
^
→ 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等) -
$
→ 到本行行尾 -
g
_ → 到本行最后一个不是blank字符的位置。 -
/<word>
→ 搜索 匹配 的字符串, 如果搜索出多个匹配,可按n键到下一个) -
<line>G
→ [go to] 到第 n 行 -
gg
→ 到第一行。(相当于1G,或 :1) -
G
→ 到最后一行。
按单词移动光标
-
w
和W
→ 到下一个单词的开头 -
e
和E
→ 到下一个单词的结尾 -
b
和B
→ 到上一个单词的开头
如果你认为单词是由默认方式,那么就用小写的e和w。默认上来说,一个单词由字母,数字和下划线组成(程序变量)
如果你认为单词是由blank字符分隔符,那么你需要使用大写的E和W。(程序语句)
-
%
: 匹配括号移动,包括(
,{
,[
你需要把光标先移到括号上 -
*
和#
: 匹配单词移动 (光标当前所在的单词),移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
-
0
→ 到行头 -
^
→ 到本行的第一个非blank字符 -
$
→ 到行尾 -
g_
→ 到本行最后一个不是blank字符的位置。 -
f<char>
→ 到本行下一个 匹配字符处,大写的F
为本行上一个,例如fs
到下一个为s的字符 -
t<char>
→ 到本行下一个 匹配字符前的第一个字符,大写的T
为本行上一个
可视化选择组合(重要)
-
<action><move>
action
可以是任何的命令,如d
(删除)c
,y
(拷贝),v
(可以视模式选择)。move
任何移动光标的命令
当光标在
==
之后的blank字符上:
下一个组合
<action><mode><object>
可以同时往光标两边扩充,光标可以在选择内容的任意位置上;而当前组合中,光标只能在其中的一端。
-
<action><mode><object>
-
action
与上同,可以是任何的命令 -
mode
可以是:-
a
attach, 如果<object>
是特别的字符的话,那么将会把括号给包含在内,其他情况与i
等价 -
i
inner, 不包含括号
-
-
-
object
可能是: w 一个单词 (a
,i
等价), W 以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符(能将文字括起来):"
,'
,)
,}
,]
,>,
(不区分左右符号)当光标在
I
上:
可视块操作 向多行插入
-
<C-v><move>I
向多行首部添加-
<C-v>
进入可视块 -
<move>
移动光标选择行,我在这里用的是G
, (可使用 j 或 <C-d> 或是 /pattern 或是 % 等……) -
I
进入插入模式
-
-
<C-v>G$A
向多行尾部添加
缩进
-
J
→ 把所有的行连接起来,变成一行 -
<
或>
→ 左右缩进 -
=
→ 自动缩进
宏录制 把你的命令临时保存起来
-
q<char>
→ 开始以<char>
为名字进行宏录制 -
q
→ 在宏录制时停止录制 -
@<char>
→ replay宏<char>
-
@@
→ 快速replay最新录制的宏
示例
在一个只有一行且这一行只有“1”的文本中,键入如下命令:
qaYp<C-a>q
-
qa
开始录制,名字为a-
Yp
复制行 -
<C-a>
增加1 -
q
停止录制
-
@a
→ 在1下面写下 2@@
→ 在2 正面写下3现在做
100@@
会创建新的100行,并把数据增加到 103.
在gif图中,录制宏时也会实际执行,所以会比原文多一个,可能是vs code vim的原因