下面的命令是我常用的一些快捷键操作,我使用的编辑器是 vscode,安装了 vim 插件。
如何在 vscode 中使用 vim?可以看看我的 vscode 配置
hjkl
:左下上右gj
和 gk
:移动至下一个或者上一个物理行,当一行出现 linewrap 时,使用 j
和 k
并不能按照视觉看到的一行进行移动{
:跳转至向上寻找的第一个段落首部的前一行}
:跳转至向下寻找的第一个段落尾部的后一行(
:跳转至向上寻找的第一个段落首部的所在行)
:跳转至向下寻找的第一个段落尾部的所在行w
:下一个单词开头b
:上一个单词开头e
:下一个单词结尾ge
:上一个单词结尾gg
:跳转到第一行G
:跳转到最后一行<number> + gg
:跳转到第 number 行:<number>
:跳转到第 number 行%
:匹配对应括号,并进行跳转*
和 #
:匹配当前光标所在的单词,移动光标到下一个或上一个f
、F
、 t
和 T
,行内光标跳转 #f
:当前行跳转到光标后的指定字符,按 ;
跳转到下一个指定字符F
:当前行跳转到光标前的指定字符,按 ;
跳转到下一个指定字符t
:当前行跳转到光标后的指定字符前的一个字符,按 ;
跳转到下一个指定字符前一个字符T
:当前行跳转到光标前的指定字符后的一个字符,按 ;
跳转到下一个指定字符后一个字符一般,我只用 f
和 F
。
v
:normal 模式进入 visual 模式 V
: normal 模式进入 visual 模式,并选中当前行 i
: normal 模式进入 insert 模式,光标出现在当前选中字符前 I
: normal 模式进入 insert 模式,光标出现在行首 a
: normal 模式进入 insert 模式,光标出现在当前选中字符后 A
: normal 模式进入 insert 模式,光标出现在行尾 esc
: 从 visual 和 insert 模式退回到 normal 模式 o
:在当前行下方插入一行,并进入 insert 模式 O
:在当前行上方插入一行,并进入 insert 模式
在模式切换中已经包含了插入的相关快捷键。
gi
:在上一个做出变化的地方进入插入模式x
:删除当前光标所在的字符dd
:删除当前行cc
:删除当前行,并进入 insert 模式D
:删除从当前光标至行尾的内容C
:删除从当前贯标至行尾的内容,并进入 insert 模式yy
:复制当前行Y
:与 yy
相同yl
:复制当前光标下的字符yas
:复制一个句子yap
:复制一个段落p
: 粘贴剪切板至光标后P
:粘贴剪切板至光标前gP
: 与 P
相同,只不过将光标置于粘贴内容的后面gp
: 与 p
相同,只不过将光标置于粘贴内容的后面cw
:删除从光标所在位置后到一个单词的结尾,并进入 insert 模式(同理可以用 dw
删除,但是不进入 insert 模式)c$
:删除从光标所在位置后到本行结尾,并进入 insert 模式(同理可以用 d$
删除,但是不进入 insert 模式)r
:替换当前光标下的字符,按下 r
,然后输入一个字符,用来替换当前字符v + <select area> + <action>
:可以使用 v 进入 visual 模式,然后选中区域,最后使用 y
、c
、d
和 r
对选中区域进行操作。
<command><pos>
模式:<command>
可以是y
、d
、c
等,(可以用于光标跳转的一系列字符) 可以是 w
(一个单词的结尾)、$
(行尾)、^
(行首第一个非空字符)、b
(单词的开头)、0
(行首) 等等。
<verbs><adjectives><objects>
模式:你可以将 operator(y
,d
,c
)作为 verbs,count、a 和 i 作为 adjectives,移动(hjkl、w、$、^、b、0等)作为 objects,例如:
d3l
: 删除光标右侧三个字符dl
:adjectives 可以省略,所以dl
等价于d1l
diw
:删除光标下的单词不包括周围的空格
zc
:折叠代码zo
: 展开代码zM
: 全部折叠zR
: 全部展开(1)移动当前所在行的位置
zz
:将当前光标所在行移动到窗口中间zt
: 将当前光标所在行移动到窗口顶部zb
: 将当前光标所在行移动到窗口底部(2)行移动
ctrl + e
:一行一行向下移动ctrl + d
:向下移动窗口显示行数的一半ctrl + y
: 一行一行向上移动ctrl + u
: 向上移动窗口显示行数的一半(1)创建分屏
使用命令:
:split [file]
或者 :sp [file]
:添加一个横屏 :vsplit [file]
或者 :vsp [file]
:添加一个竖屏
使用快捷键:
ctrl + w s
:以当前文件添加一个横屏 ctrl + w v
:以当前文件添加一个竖屏
(2)分屏切换
ctrl + w <arrow>
或者 ctrl + w <hjkl>
:将光标移动到指定方向的分屏
(3)关闭屏幕和分屏
:only
:只保留当前分屏,关闭其他分屏 ctrl + w c
:关闭当前窗口 ctrl + w q
: 关闭当前窗口,若只有一个分屏,则退出 vim ctrl + w o
: 关闭其他窗口
(4)增加屏幕高度
crtrl + w +
:增加高度 ctrl + w -
:减小高度
ctrl + v
进入块操作hkjl
、$
等来插入多光标和移动光标I
和 A
进入编辑同样可以使用 v
进入 visual 模式,选中一些行,然后按 A
在每行结尾插入光标进行编辑。
v
进入 visual 模式,进入 visual 模式后,可以通过 hjkl
选中一些行。可以对选中的行做如下操作。
J
:把所有行连接起来变成一行<
或 >
:左右缩进=
:自动缩进,格式化代码(非常 nice)替换格式如下,支持正则表达式。
:[range]s/<pattern>/[string]/[flags] [count]
该命令表示在 range
的每一行中搜索pattern
,并将其替换为 string
。 count
是一个乘以命令的正整数。
(1)查找
/<pattern>
:高亮查找到的内容/\C<pattern>
:大小写敏感/\c<pattern>
: 忽略大小写/\<<pattern>\>
: 整词匹配,注意这里前面是修饰符 \<
,后面是修饰符 \>
,两个组合表示整词匹配(whole word match)*
:向下查找当前光标下的 word#
:向上查找当前光标下的 wordn
:跳转到下一个查找到的内容:nohl
:取消高亮(2)当前行替换
:s/foo/bar/
:替换当前行查到的第一个 foo
,并将其替换为 bar
:s/foo/bar/g
:替换当前行查到的所有 foo
,并将其替换为 bar
(3)全文件替换
:%s/foo/bar/
:替换当前文件中所有行的第一个 foo
,将它们替换为 bar
:%s/foo/bar/g
:替换当前文件中所有行的 foo
,将它们替换为 bar
(4)c
flag
:%s/foo/bar/gc
使用 c
标记可以依次确认每个替换。会弹出 replace with foo(y/n/a/q/l)?
确认对话框,按 y
替换匹配项,或按 l
替换匹配项并退出。 按 n
跳过当前匹配,按 q
或 Esc
退出替换。 a
选项替换匹配项和所有剩余匹配项。
(5)i
flag 开启大小写敏感
:s/foo/bar/gc
: foo
不会匹配 Foo
(6)指定查询范围
:3,10s/foo/bar/g
:查询范围为第三行到第十行,将该范围内的 foo
替换为 bar
:.,$s/foo/bar/
:查询范围为当前行到最后一行,将该范围内的 foo
替换为 bar
,.
表示当前行,$
表示最后一行 :.,+4s/foo/bar/g
:查询范围为从当前行开始往下数四行(总共四行),将该范围内的 foo
替换为 bar
,.
表示当前行,+4
表示接下来的四行
<start position><command><end position>
。
例如 0y$
,表示拷贝当前行。
0
:先到行首y
: 从 <start position>
开始拷贝,这里是行首$
:表示一直拷贝到行尾<command><a | i | s><obj>
s
需要插件支持,vscode-vim 自带这个功能
a
表示 around,i
表示 inner,s
表示 surround,command
可以是 d
c
y
,obj
可以是引号、双引号、w
和 t
,t
表示 tag,对 html 这种标记语言比较有用
diw
:删除单词,不包括单词周围的符号,例如 " word "
,光标在 w
,删除后变成了 " "
daw
:删除当前单词,包括周围的空白字符,例如 " word "
,光标在 w
,删除后变成了 ""
da"
: 删除双引号中间的内容,包括双引号本身,例如 " word "
,光标在 w
,删除后变成了 ``di"
: 删除双引号中间的内容,不包括双引号本身,例如 " word "
,光标在 w
,删除后变成了 ""
ds"
:删除当前单词周围的双引号,例如 " word "
,光标在 w
,删除后变成了 w
如果把上面的 command d
换成 c
,那么删除后会进入到插入模式。
s
对写 html 这种标记语言非常有用,例如将下面的 div
改成 p
,可以使用 cstt
,然后输入 p
,c
表示 change
<div>
这是一个段落
</div>
gh
:类似于鼠标悬浮,会弹出定义窗口gd
:跳转到定义和引用:edit [file-path]
:编辑已存在的文件或者新建一个文件(完)