下面的命令是我常用的一些快捷键操作,我使用的编辑器是 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等价于d1ldiw:删除光标下的单词不包括周围的空格
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]:编辑已存在的文件或者新建一个文件(完)