VSCode使用Vim插件心得
vim插件提供了非常非常多的功能,要全记住并灵活运用很不容易。我对vim插件操作方法按程序员的思路进行了分类整理,归纳下来有以下几类:
- 操作函数:比如复制、删除、修改,以下简称函数。
- 快捷函数:就是预设了数量及参数的函数,快捷函数不再接受数量及参数,以下简称快捷。
- 高阶函数:就是使用函数作为参数的函数。例如:宏、寄存器、标注。
- 操作类型:比如字符、单词、行、段落、上半屏、下半屏、全文等等,以下简称参数。
- 操作数量:比如要复制3个字,这里的3就是操作数量,以下简称数量。
- 切换方法:仅用于切换状态,没有任何操作类型、操作数量。
操作数量
操作数量不能单独使用,必须配合操作类型、操作函数使用。操作数量在普通模式、视图模式均可使用。案例如下:
- 2b:往前跳转2个单词,单词开头
- 2e:往后跳转2个单词,单词尾部
- 3x:删除3个字符
- 2dd:删除2行
- d2j:删除光标所在行及下面2行
操作类型
字符
- h:光标左移
- j:光标下移
- k:光标上移
- l:光标右移
单词
w (word):到下一个单词开头,不忽略符号
W (word):到下一个单词开头,忽略符号
e (end):到本单词尾部或下一单词结尾,不忽略符号
E (end):到本单词尾部或下一单词结尾,忽略符号
b (begin):到上一个单词开头,不忽略符号
B (begin):到上一个单词开头,忽略符号
ge:到上一单词结尾
gE:到上一单词结尾,忽略符号
行
- 0:到行首
- ^:到行首第一个非空字符
- $:到行尾
- gg:到第一行
- G:到最后一行
- 数字G:跳转到指定数字行,如20G即跳到第20行
- 数字回车:向后跳转数字行
- f字符:快速定位到行内指定字符(向后找)
- F字符:快速定位到行内指定字符(向前找)
- -:向上移动一行
- +:向下移动一行
段落
- (:上一段落
- ):下一段落
页面
H:页头
L:页尾
M:页中
{:向上翻一屏(自定义)
"vim.normalModeKeyBindingsNonRecursive": { // 屏幕『向上』移动一页"before": ["{"],"after": ["<C-b>"]},
- }:向下翻一屏(自定义)
"vim.normalModeKeyBindingsNonRecursive": [{ // 屏幕『向下』移动一页 "before": ["}"],"after": ["<C-f>"]},]
- [:向上翻半屏(自定义)。自定义设置如下:
"vim.normalModeKeyBindingsNonRecursive": [{ // 屏幕『向上』移动半页"before": ["["],"after": ["<C-u>"]},]
- ]:向上翻半屏(自定义)。自定义设置如下:
"vim.normalModeKeyBindingsNonRecursive": [{ // 屏幕『向上』移动半页"before": ["]"],"after": ["<C-d>"]},]
- zt:快捷,将光标所在行切换到页面的顶部
- zb:快捷,将光标所在行切换到页面的底部
- zz:快捷,将光标所在行移动到屏幕的中间
- zc:快捷,折叠代码块
- zo:快捷,打开代码块
- za:快捷,切换代码块状态
普通模式 --NORMAL–
函数
复制y:前参、后参
- 2yge,向左复制不含光标共2个词
- 2yh,向左复制不含光标共2个字
- 3yl,向右复制含光标共3个字
- y5l,复制含光标共5个字
- y1j,复制含光标行及下一行
- y2k,复制含光标行及上2行
- y3w,复制含光标单词及后续共3个单词
- y$,复制含光标到行尾
- y^,复制不含光标到行首
- yw:复制一个单词
- yaw:复制整个单词
- ye:复制光标后一个单词
- yb,复制光标前一个单词
- yj:复制下一行内容
- y2j:复制下2行内容
- yk:复制上一行内容
- y3k:复制上3行内容
- y$:复制到行尾,含光标处
- y^:向前复制至行首空字符处,不含光标
- y0:复制到行首,不含光标处
- y(:复制上一段落
- y):复制下一段落
- yG:复制到结尾
- ygg:复制到开头
大写Y:快捷,复制光标所在行。
删除块d:前参、后参
小写d:删除指定内容块。案例如下:
- 1dj,删除光标所在行及下一行
- d1j,删除光标所在行及下一行
- dd,删除光标所在行
- dw,删除光标处开始至单词结尾。例如:单词"password",光标停在w上按dw后剩下"pass"
- diw,删除光标处的整个单词。例如:单词"password",光标停在d上按diw后剩下""
- di符号,删除光标处符号范围内全部内容。例如"your password",光标停在r上按di"后剩下""
- da符号,删除光标处符号范围内连同符号。例如:input “your password”!,光标停在r输入da"剩下input!
大写D:快捷,删除光标至行尾内容块。
删除字符x:仅前参
小写x:向右删除字符,相当于del键。案例如下:
- x,删除光标所在的字符
- 3x,向右删除含光标共3个字符
大写X:向左删除字符,相当于Backspace键。案例如下:
- X,删除光标前面的字符
- 2X,删除光标前面2个字符
删除换行J
- J:快捷,删除当前行行尾的换行符
插入换行K
- K:快捷,在光标前插入换行符并进编辑模式。自定义设置如下:
// 普通模式下非递归绑定按键"vim.normalModeKeyBindingsNonRecursive": [{ // 断行并进入编辑状态"before": ["K"],"commands": ["lineBreakInsert"],"silent": true},]
编辑块c:前参、后参
编辑c:删除指定内容块后进编辑模式。案例如下:
- ck:删除光标所在行及上一行
- cj:删除光标所在行及下一行
- cw:删除光标处开始的一个单词
- ce:删除光标处开始的一个单词
- ciw:删除光标处开始的整个单词
- caw:删除光标处开始的整个单词连外面的符号
- cb:删除光标前一个单词
- cc:删除整行
- 3cc:直接删3行
- c$:删除到行尾,含光标处
- C:删除至行尾
- c^:向前删除至行首空字符处,不含光标
- c0:删除到行首,不含光标处
- c(:删除上一段落
- c):删除下一段落
- cG:删除到结尾
- cgg:删除到开头
大写C:快捷,删除含光标至行尾内容块后进编辑模式。
编辑字符s:仅前参
小写s:删除含光标处字符进编辑模式。案例如下:
- s:删除光标处字符进编辑模式
- 5s:删除含光标处及之后共计5个字符进编辑模式
大写S:快捷,删除光标所在行后进编辑模式。
粘帖p:仅前参
小写p:在光标后粘贴内容。案例如下:
- p:将剪贴板中的最新内容复制一份到光标后面。
- 3p:将剪贴板中的最新内容复制三份到光标后面。
大写P:在光标前粘贴内容,用法和小写p一致。
替换r:仅前参
小写r:替换光标处字符。案例如下:
- r:将接下来一次的输入替换光标处的那个字符(中文输入一个词也算一次输入)。对“123”的1按r然后输入中文词“中国人”,结果是“中国人23”
- 2r:将接下来的一次输入替换含光标向右的2个字符(中文输入一个词也算一次输入)。对“123”的1按2r然后输入中文词“中国人”,结果是“中国人中国人3”
大写R:进入替换模式
撤销与反撤销u
- u:快捷,撤销最近一次修改
- 数字u:撤销最近数字次修改(自定义)
重复执行
- .:快捷,最后一次操作重复执行一次
- 数字.:最后一次操作重复执行数字次
字母大小写切换~
- ~:切换将光标所在位置的字符大小写互换(shift+1左边的符号)
- 3~:将光标开始的3个字符大小写互换(shift+1左边的符号)
- g~:切换当前行字母的大小写
- 3~:将光标开始的3个字符大小写互换(shift+1左边的符号)
- gUU:将当前行的字母换成大写
- gUaw(gUiw):将光标下的单词换成大写
- guaw(guiw):将光标下的单词换成小写
- 可视模式下,选中字母后,按U将其换成大写
- 可视模式下,选中字母后,按u将其换成小写
行内查找字符F
- f{char}:光标到下个{char}
- F{char}:光标到上个{char}
- ;:继续找
- ,:反向找
行内查找字符T
- t{char}:光标到下个{char}前
- T{char}:光标到上个{char}前
- ;:继续找
- ,:反向找
高阶函数
宏q
录制
q字母,然后操作键盘,操作结束后再按q即表示宏录制完毕。例如:
- qai123,再按esc,q
播放
@字母,重复宏记录的键盘操作。例如:
- @a,就可以执行输入i123,结果就是在光标处插入了123
寄存器"
存入
"小写字母<y、d、x>:将y或d或x的内容存入寄存器。例如:
- "ayk:将当前行及上1行内容存入a寄存器
取出
"字母<p或P>:将寄存器内容取出。例如:
- "ap:将a寄存器内容粘贴到光标后面
标注m
m字母,记录当前光标的位置。例如:
- 现在光标在第10行,按mc,记录下当前位置。
标注
标注位置后,进行翻页、跳转、移动光标,再按`字母,光标会迅速跳回到之前记录的位置。例如:
- 输入gg,光标回到第1行,再按`c,光标会回到第10行。
重复输入
- 先输数字再按i再按esc可以快速输入重复内容
- 先按5,再按i,再输入abc,再按esc,相当于快速输入5个abc
命令模式
全文查找
- /{string}:光标到下个{string}
- ?{string}:光标到上个{string}
- n:继续找
- N:反向找
全文替换
- :%s/word1/word2/g:全文直接将word1替换成word2
- :%s/word1/word2/gc:全文直接将word1替换成word2,替换前会询问
- :1,$s,从第一行到最后一行
- :10,20,从第10行到第20行
- 在 10 - 20 行添加 // 注释
:10,20s#^#//#g - 在 10 - 20 行删除 // 注释
:10,20s#^//##g - 在 10 - 20 行添加 # 注释
:10,20s/^/#/g - 在 10 - 20 行删除 # 注释
:10,20s/#//g
可视模式 --VISUAL–
进入可视模式后按v或esc键可还原到普通模式
- 字符选择模式,小写v
- 行选择模式,大写V
- 块选择模式,(自定义)
"vim.normalModeKeyBindingsNonRecursive": [{ // 进入块选择模式"before": ["\\",],"commands": ["extension.vim_ctrl+v"]},]
模式切换
替换模式切换 --Replace–
- r:替换光标所在字符
- R:进入替换模式
插入模式切换 --INSERT–
insert
- i:在光标前插入
- I:在行首插入
append
- a:在光标后插入
- A:在行尾插入
oneLine
- o:在下一行插入
- O:在上一行插入
change
- c:删除字符后进插入模式
- C:删除光标处至行尾进编辑模式
vim插件设置
我禁止vim使用ctrl,因为vscode本身有大量快捷键用了ctrl。为此另外增加了许多leader快捷操作。
"vim.leader": "<space>", // 绑定vim前导键"vim.easymotion": true, // 启用easymotion插件"vim.incsearch": true,"vim.useSystemClipboard": true, // 是否启用系统粘贴板作为vim寄存器"vim.useCtrlKeys": false, // 是否由vim接管ctrl+any的按键"vim.hlsearch": true, // 是否突出显示与当前搜索匹配的所有文本"vim.highlightedyank.enable": true, // 被复制时是否高亮"vim.highlightedyank.duration": 500, // 被复制时高亮持续时间:0.5秒 // 可视模式下的非递归按键绑定"vim.operatorPendingModeKeyBindings": [],// 插入模式下的非递归按键绑定
leader快捷键
- 空格+u:还原最近一次的撤销,这个和普通模式下u的逆操作。(等价于ctrl+z撤销,ctrl+shift+z取消撤销)
"vim.normalModeKeyBindingsNonRecursive": [{ // 取消最近的撤销"before": ["<leader>","u"],"after": ["<C-r>",]},]
- 空格+/:当前页查找字符串跳转(原来是2个空格+/)
"vim.normalModeKeyBindingsNonRecursive": [{ // 全屏查找字符串"before": ["<leader>","/"],"after": ["<leader>","<leader>","/"]},]
- 空格+s:当前页查找字符跳转(原来是2个空格+s)
"vim.normalModeKeyBindingsNonRecursive": [{ // 全屏查找字符串"before": ["<leader>","s"],"after": ["<leader>","<leader>","s"]},]
- 空格+p:复制一行()
"vim.normalModeKeyBindingsNonRecursive": [{ // 复制一行"before": ["<leader>","p"],"after": ["y","y","p",]},]
其他编程常用快捷操作
- gd:选中函数,进入其内部查看(goto definition)
- gh:显示悬停提示信息(goto hover)
- gt:切换标签页(goto tab),向后
- gT:切换标签页(goto tab),向前
- 2gt:跳到第2个标签页
- ctrl+tab:可以快速切换
- alt+数字:跳到指定标签
- ctrl+b:开关侧边栏
- ctrl+0:切换到侧边栏,选中文件按空格打开,再按l切换到文件
- ctrl+w:关闭当前工作区
- ctrl+数字:切换指定工作区
多光标
- ctrl+shift+up:向上加一个光标
- ctrl+shift+down:向下加一个光标
- ctrl+u:撤销上一次的多光标
内容互换
- alt+up:光标所在行内容向上移动一行
- alt+down:光标所在行内容向下移动一行
代码编辑
gcc:注释
ngcj:注释从本行和下方n行的代码
gcnj也可以用
ngck:注释从本行和上方n行的代码
gcnk也可以zc:折叠代码
zo:取消折叠代码
za:切换代码折叠状态
gh:查看代码提示
gd:跳转到代码源码
diw:删除光标以后的单词(delete inner word)
daw:删除光标所在的整个单词(delete all word)
dit:删除Row标签内所有内容(delete inner tab)
dat:删除Row标签体全部内容(delete all tab)
di":删除符号内的所有内容,如"password!“,在"内部输入di"后剩下”"
da":删除符号内的所有内容,如a “password”!,在"内部输入da"后剩下a!
surrounds处理(对外围符号、标签的处理)
cs"‘:将test外面的双引号快速改变为单引号"test",输入cs"’
ds":将"test"外面的符号删除,输入ds"
cs"t:将"test"外面的内容更改为标签对,<<123>test</<123>多光标操作gb
选中标签对中的任意字符,按ctrl+d,再按c,就能同时修改标签对的内容。abcd
选中标签对中的任意字符,按gbc,就能同时修改标签对的内容。abcd
区域
- ctrl+b:开关侧边栏
- ctrl+0:切换到侧边栏
- ctrl+1:切换到工作区1
- ctrl+2:切换到工作区2
- …
- ctrl+n:新建文件
- gt(go to tab):跳到下一个标签页
- gT(go to tab):跳到上一个标签页
- ngt(go to tab):跳到第n个标签页
VSCode使用Vim插件心得相关推荐
- VSCode安装vim插件
VSCode编辑器是一款集大成的编辑器,有十分丰富的插件.目前,我已经在VSCode编辑上写markdown文件.C++程序.python代码等.最近得知VSCode编辑居然支持vim.于是,便迫不及 ...
- 如何用python写html的插件,使用python开发vim插件及心得分享
如何使vim下开发python调试更方便 如何用 Python 给 Vim 写插件 如何使 Vim 下开发 Python 调试更方便 怎么用python调用matlab? 打算用vim写Python ...
- 【vim新手心得】最常用快捷键、编辑器vim插件使用心得(VsVim、IdeaVim、Vimium)
看到一个B站up主安利vim编辑器,小伙子真的很硬核:用linux.配置neovim,实况开发python.swiftUI等等. vim基本弃用鼠标.方向键.可以配置各种插件的特性还不算太吸引我,毕竟 ...
- vscode安装python插件失败_vscode安装python插件
vscode创建python文件 在介绍如何安装python插件之前,先来看看没有插件的情况下,是否能够在vscode中编辑和执行python文件: 1.文件 >> 新建文件,然后就会弹出 ...
- VScode设置vim自定义按键映射
在vscode中下载vim插件后,如何设置vim按键映射? 方法 看Github项目官方vim使用文档,里面有详细的按键映射指南,代码在settings.json文件里添加即可 另外还有easy mo ...
- vscode配置vim
一.打开vscode插件搜索vim选择右侧"Install"安装即可 安装完成后vscode的编辑器自动切换为vim编辑器 二.vim配置 Vscode支持.vimrc原生的vim ...
- vim插件的安装方式 -- vim注释插件和doxygen函数注释生成插件-ctrlp插件-tabular等号对齐 插件...
使用unzip的时候 指定 -d选项, 是说明解压到的 目标地址. 这个参数还是比较方便的, 比直接unzip到当前目录, 然后在去拷贝到目标目录, 然后再删除当前目录中的解压文件夹, 方便多了. 使 ...
- vim 插件_Vim自动生成tags插件vim-gutentag使用方法
在常规的使用ctags生成tag标签文件实现跳转的方式下,每次需要更新tags文件时都需要手工运行 ctags -R 生成当前项目所有源文件对应的tag标签文件. 当工程文件多.文件更新频繁时,上述生 ...
- VScode 乱装插件环境破坏踩坑自我反思总结
VScode 乱装插件环境破坏踩坑自我反思总结 1.2021-01-18早上由于百度 <Vscode 常用插件推荐>,瞎装了插件,把自己的Vscode环境给破坏了 2.在文件-首选项-设置 ...
- 解决vscode中golang插件依赖安装失败问题
解决vscode中golang插件依赖安装失败问题 参考文章: (1)解决vscode中golang插件依赖安装失败问题 (2)https://www.cnblogs.com/feiquan/p/11 ...
最新文章
- C语言实现五子棋游戏(可N*N棋盘)
- mysql导出数据 程序_MySQL数据导出与导入程序代码
- linux写时复制技术初探
- Scala函数式对象-有理数
- 京东购物在微信等场景下的算法应用实践
- JS操作保存cookie(转载他人)
- demo12 webpack 处理 scss
- C++ 用template实现的堆
- maven命令-P 参数引发的思考
- 不懂技术的小白,使用电商网站建设工具有什么注意事项?
- 阮一峰ES6入门学习笔记~~变量的解构赋值
- 【转载】电信光猫中兴F451破解方法
- wifi的html页面,笔记本怎么设置wifi
- 彪悍的人生不需要解释!
- LNMP论坛搭建,图案步骤,简单清晰明瞭
- DataType--类型基础
- 三大开源社区是哪几个_3个衡量开源社区健康的指标
- 绑定校园卡服务器没有响应,校园卡服务部服务器暂行管理规定
- linux对电子信息工程专业的意义,电子信息工程专业的学生应该考哪些必要的资格证书? (1)...
- 一篇搞懂 IP、子网掩码、网关、DNS、端口号