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个标签页
  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值