VSCode 中使用 VIM 的操作
VSCode VIM 的基本操作
前言
这篇文章是我学习在 VSCode 下使用 VIM 的笔记,主要参考的是 B 站 up 主 薄涛 TV 和 Learn VIM 教程。
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 不包括包围文本对象的空白或者括号等,而 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>: 删除到下一个 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 插件默认将 <leader> 设为 Space.
<leader><leader> s <char>: 搜索 char 字符
其他的一些操作可以查看 VSCode 的 VIM 插件的介绍页
vim-surround
ds": 删除两侧的 “y s <motion> <desired>: 通过 motion 在指定内容两侧增加字符cs"': 把两侧的 “ 改为 ‘