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插件心得相关推荐

  1. VSCode安装vim插件

    VSCode编辑器是一款集大成的编辑器,有十分丰富的插件.目前,我已经在VSCode编辑上写markdown文件.C++程序.python代码等.最近得知VSCode编辑居然支持vim.于是,便迫不及 ...

  2. 如何用python写html的插件,使用python开发vim插件及心得分享

    如何使vim下开发python调试更方便 如何用 Python 给 Vim 写插件 如何使 Vim 下开发 Python 调试更方便 怎么用python调用matlab? 打算用vim写Python ...

  3. 【vim新手心得】最常用快捷键、编辑器vim插件使用心得(VsVim、IdeaVim、Vimium)

    看到一个B站up主安利vim编辑器,小伙子真的很硬核:用linux.配置neovim,实况开发python.swiftUI等等. vim基本弃用鼠标.方向键.可以配置各种插件的特性还不算太吸引我,毕竟 ...

  4. vscode安装python插件失败_vscode安装python插件

    vscode创建python文件 在介绍如何安装python插件之前,先来看看没有插件的情况下,是否能够在vscode中编辑和执行python文件: 1.文件 >> 新建文件,然后就会弹出 ...

  5. VScode设置vim自定义按键映射

    在vscode中下载vim插件后,如何设置vim按键映射? 方法 看Github项目官方vim使用文档,里面有详细的按键映射指南,代码在settings.json文件里添加即可 另外还有easy mo ...

  6. vscode配置vim

    一.打开vscode插件搜索vim选择右侧"Install"安装即可 安装完成后vscode的编辑器自动切换为vim编辑器 二.vim配置 Vscode支持.vimrc原生的vim ...

  7. vim插件的安装方式 -- vim注释插件和doxygen函数注释生成插件-ctrlp插件-tabular等号对齐 插件...

    使用unzip的时候 指定 -d选项, 是说明解压到的 目标地址. 这个参数还是比较方便的, 比直接unzip到当前目录, 然后在去拷贝到目标目录, 然后再删除当前目录中的解压文件夹, 方便多了. 使 ...

  8. vim 插件_Vim自动生成tags插件vim-gutentag使用方法

    在常规的使用ctags生成tag标签文件实现跳转的方式下,每次需要更新tags文件时都需要手工运行 ctags -R 生成当前项目所有源文件对应的tag标签文件. 当工程文件多.文件更新频繁时,上述生 ...

  9. VScode 乱装插件环境破坏踩坑自我反思总结

    VScode 乱装插件环境破坏踩坑自我反思总结 1.2021-01-18早上由于百度 <Vscode 常用插件推荐>,瞎装了插件,把自己的Vscode环境给破坏了 2.在文件-首选项-设置 ...

  10. 解决vscode中golang插件依赖安装失败问题

    解决vscode中golang插件依赖安装失败问题 参考文章: (1)解决vscode中golang插件依赖安装失败问题 (2)https://www.cnblogs.com/feiquan/p/11 ...

最新文章

  1. C语言实现五子棋游戏(可N*N棋盘)
  2. mysql导出数据 程序_MySQL数据导出与导入程序代码
  3. linux写时复制技术初探
  4. Scala函数式对象-有理数
  5. 京东购物在微信等场景下的算法应用实践
  6. JS操作保存cookie(转载他人)
  7. demo12 webpack 处理 scss
  8. C++ 用template实现的堆
  9. maven命令-P 参数引发的思考
  10. 不懂技术的小白,使用电商网站建设工具有什么注意事项?
  11. 阮一峰ES6入门学习笔记~~变量的解构赋值
  12. 【转载】电信光猫中兴F451破解方法
  13. wifi的html页面,笔记本怎么设置wifi
  14. 彪悍的人生不需要解释!
  15. LNMP论坛搭建,图案步骤,简单清晰明瞭
  16. DataType--类型基础
  17. 三大开源社区是哪几个_3个衡量开源社区健康的指标
  18. 绑定校园卡服务器没有响应,校园卡服务部服务器暂行管理规定
  19. linux对电子信息工程专业的意义,电子信息工程专业的学生应该考哪些必要的资格证书? (1)...
  20. 一篇搞懂 IP、子网掩码、网关、DNS、端口号

热门文章

  1. 左手补贴右手社交 杀入直播红海的拼多多会有机会吗?
  2. freeswitch安装
  3. lqr算法 c语言,【CS229 lecture18】linear quadratic regulation(LQR) 線性二次型調節控制
  4. 传感器 动态误差计算
  5. 应用comsol模拟水力压裂应力分布
  6. 新科LoRa网关和LoRa节点
  7. Mac SnailSVN不显示状态图标
  8. 方向余弦,向量夹角,向量的投影
  9. python中xlsxwriter模块_python xlsxwriter模块的使用
  10. CPRI之TDD开关控制字