在vscode中使用vim系列

前沿

在vscode中使用vim增强我的编码能力,其实一直以来都很想学习vim的编码方式,虽然我也知道这是一个艰难的过程,但是总归是要面对的,既然这个过程很痛苦并且不是很容易就能够将一些内容熟练掌握,那么就从这里给自己进行一个对应的记录,有什么看不明白或者不清楚的地方可以有一个随时翻阅的地方。顺便提一下,这个文章是看的国外一篇文章翻译过来的,对应的参考资料在文章末尾有附带上,可自行查阅。

vim很强,因为它难

在vscode中安装vim

  1. 在扩展中搜索vim
  2. 排名第一的并安装它
  3. 要知道cmd+shift+p打开命令面板
  4. cmd+p跳转对应的文件

vim基础

刚开始的矩形光标,你会发现你想要输入的时候没有任何反应。当然,在你按下键盘的时候,有可能会触发一些特殊含义的命令,使得矩形光标在屏幕上飞来飞去,甚至删除了一些对应的内容。

那么所有这些都源自于vim的正常模式(也就是vim与文本的默认模式),并且在这个模式下,不会进行文本的插入。

那么什么是普通模式,模式又是什么意思?

vim中的模式

1. 普通模式NORMAL

vim普通模式

如何进入: esc ctrl+c ctrl+[

四处移动并编辑文本或者跳转

w: 表示跳转到下一个单词
b: 向后跳到单词的开头
e: 跳转到单词的结尾
ge: 向后跳转到单词的末尾
j: 光标向下移动
k: 光标向上移动
h: 光标向左移动
l: 光标向右移动

移动到特定角色

f{字符}: 后面跟上特定字符,移动到行中特定出现的那个字符上
t{字符}: 移动的位置比f前置一个字符
如果执行完搜索,可以使用;转到下一个字符,,转到上一个字符

极端水平移动

0: 移动到行的第一个字符
^: 移动到行的第一个非空白字符
$: 移动到行尾
g_: 移动到行尾的非空白字符

垂直移动

}: 向下跳整段
{: 向上跳
ctrl+D: 向下移动半页
ctrl+U: 滚动半页
/{字符}: 向后搜索,一个文件中
?{字符}: 向后搜索,一个文件中
enter确定你搜索的内容,n跳转到下一个匹配的内容,N上一个,可理解为重复搜索

计数可以更快的移动

2w: 向前移动2个单词
3j: 向下移动三行

gg: 跳转到文件顶部
{line}gg: 跳转到特定的某一行
G: 文件末尾

编辑代码相关

{operator}{count}{motion}
{count}{operator}{motion}
例如:d2w 表示删除两个单词,motion可以和之前的移动结合起来,比如d5j表示向下删除5行。

  • df’表示删除光标中当前行的所有内容,直到’字符第一次出现(删除包括字符本身)
  • dt’类似df’,但排除字符本身
  • d/hello,删除一切,直到第一次出现hello
  • ggdG删除整个文档

d: 删除delete
c: change改变,合并了d和i操作符
y: yank复制
p: paste粘贴
=: format
g~: toggle case,更改大小写字母,也可以指定gU大写,gu小写
>: 添加缩进
<: 删除缩进
=: 格式代码

速记语法

将运算符加倍使其在整行上操作
dd: 删除整行
cc: 更改整行
大写表示其更强的版本
D: 从光标删除到行尾
C: 更改到行尾
Y: 复制完整的行
P: 在光标之前粘贴一些内容

文本对象的操作

{operator}{a(所有)|i(除了符号)}{text-object}
w: 单词
s: 句子
p: 段落
b/(/): 用于()包围
B/{/}: 用于{}包围
</>: 被<>包围
[]: 被[]包围
t: 标签

daw: 删除光标所在单词
ciw: 改变当前单词
das: 删除当前句子
da”: 删除”中的内容包括”,di”仅删除”内的内容
ci”: 更改”内内容
dap: 删除段落
dat: 删除标签以及内部内容
cit: 更改标签内内容

.按键可以保存上一次的操作命令
x等价于dl删除光标下的字符
X等价于dh删除光标之前的字符
s等价于ch删除光标下的字符并进入编辑模式
~切换单个字符的大小写
u撤销上一次的更改
ctrl+r重做

2. 插入模式INSERT

进入这个模式有几种方式

  • i在光标之前插入
  • a在光标之后插入
  • I在当前行开头插入
  • A在当前行之后插入
  • o在当前行下一行插入
  • O当前行上方插入
  • gi返回到你上次编辑的位置
  • ctrl+h删除你输入的最后一个文本
  • ctrl+w删除你输入的最后一句话
  • ctrl+u删除你

插入文本

vim插入模式

3. 可视模式VISAUL

{trigger visual mode}{motion}{operator}

可视化操作下的选择方式

  • v逐个字符选择
  • V逐行模式
  • 删除某些内容,进入可视模式v,然后进行对应的选择比如按下j,最后输入d删除

4. 复制粘贴

  • y 复制
  • yy 复制一行
  • p粘贴在当前光标后面
  • P粘贴在当前光标前面

5. 命令行模式

  • :edit+文件名 创建或者打开某个文件,简写:e
  • :q关闭文件 加上!表示强制执行操作 如:q!
  • :w保存文件,同上
  • :wq保存并关闭,组合命令
  • :wa保存所有文件
  • :qa关闭所有文件
  • :wqa保存关闭所有文件
  • 都可以加上!强制执行
  • :1,3d 表示删除1,2,3行
  • :1,+2d 表示同上
  • :.,+2d 表示删除当前行和接下来的两行
  • :%d删除整个文件
  • :0,+10d删除文件开始十行
  • :.,$d从当前行删除到文件末尾
  • @:重复上一次命令
  • @@再次重复

替换操作

:[range]s/{pattern}/{substitute}/{flags}

  • :%s/hello/world 将整个文件中的hello替换成world
  • :s/hello/world 将当前行中的hello替换成world
  • flag: g全局搜索 i不区分大小写的搜索 c确认每一次替换

6. 拆分窗口

  • :sp 文件名 水平平铺文件
  • :vsp 文件名 垂直平铺文件
  • ysaptli> 用tag li标签包围一段文字

vscode中的快捷键

汇总vscode的快捷键

参考资料

[1] vscode中加入vim https://www.barbarianmeetscoding.com/boost-your-coding-fu-with-vscode-and-vim/table-of-contents