日期:2022年7月2日标签:Developer

vim 使用技巧 #

下面的命令是我常用的一些快捷键操作,我使用的编辑器是 vscode,安装了 vim 插件。

如何在 vscode 中使用 vim?可以看看我的 vscode 配置

光标移动 #

fFtT,行内光标跳转 #

一般,我只用 fF

模式切换 #

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 模式

插入、删除、复制、粘贴 #

在模式切换中已经包含了插入的相关快捷键。

<command><pos> 模式:<command> 可以是 ydc等,(可以用于光标跳转的一系列字符) 可以是 w(一个单词的结尾)、$(行尾)、^(行首第一个非空字符)、b(单词的开头)、0(行首) 等等。

<verbs><adjectives><objects> 模式:你可以将 operator(ydc)作为 verbs,count、a 和 i 作为 adjectives,移动(hjkl、w、$、^、b、0等)作为 objects,例如:

  • d3l: 删除光标右侧三个字符
  • dl:adjectives 可以省略,所以 dl 等价于 d1l
  • diw:删除光标下的单词不包括周围的空格

代码折叠 #

窗口移动 #

(1)移动当前所在行的位置

(2)行移动

分屏操作 #

(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 -:减小高度

多光标操作(块操作) #

  1. 使用 ctrl + v 进入块操作
  2. 可以使用 hkjl$ 等来插入多光标和移动光标
  3. 使用 IA 进入编辑

同样可以使用 v 进入 visual 模式,选中一些行,然后按 A 在每行结尾插入光标进行编辑。

visual 模式下的格式化操作 #

v 进入 visual 模式,进入 visual 模式后,可以通过 hjkl 选中一些行。可以对选中的行做如下操作。

查找和替换 #

替换格式如下,支持正则表达式。

:[range]s/<pattern>/[string]/[flags] [count]

该命令表示在 range 的每一行中搜索pattern,并将其替换为 stringcount是一个乘以命令的正整数。

(1)查找

(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 跳过当前匹配,按 qEsc 退出替换。 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$,表示拷贝当前行。

" hello "

<command><a | i | s><obj> #

s 需要插件支持,vscode-vim 自带这个功能

a 表示 around,i 表示 inner,s 表示 surround,command 可以是 d c yobj 可以是引号、双引号、wtt 表示 tag,对 html 这种标记语言比较有用

如果把上面的 command d 换成 c,那么删除后会进入到插入模式。

s 对写 html 这种标记语言非常有用,例如将下面的 div 改成 p,可以使用 cstt,然后输入 pc 表示 change

<div>
    这是一个段落
</div>

:

Peek definition 和 go to definiton #

其他 #

(完)