vim插件提供了非常非常多的功能,要全记住并灵活运用很不容易。我对vim插件操作方法按程序员的思路进行了分类整理,归纳下来有以下几类:
操作数量不能单独使用,必须配合操作类型、操作函数使用。操作数量在普通模式、视图模式均可使用。案例如下:
w (word):到下一个单词开头,不忽略符号
W (word):到下一个单词开头,忽略符号
e (end):到本单词尾部或下一单词结尾,不忽略符号
E (end):到本单词尾部或下一单词结尾,忽略符号
b (begin):到上一个单词开头,不忽略符号
B (begin):到上一个单词开头,忽略符号
ge:到上一单词结尾
gE:到上一单词结尾,忽略符号
H:页头
L:页尾
M:页中
{:向上翻一屏(自定义)
"vim.normalModeKeyBindingsNonRecursive":
{ // 屏幕『向上』移动一页
"before": [
"{"
],
"after": [
""
]
},
"vim.normalModeKeyBindingsNonRecursive": [
{ // 屏幕『向下』移动一页
"before": [
"}"
],
"after": [
""
]
},
]
"vim.normalModeKeyBindingsNonRecursive": [
{ // 屏幕『向上』移动半页
"before": [
"["
],
"after": [
""
]
},
]
"vim.normalModeKeyBindingsNonRecursive": [
{ // 屏幕『向上』移动半页
"before": [
"]"
],
"after": [
""
]
},
]
大写Y:快捷,复制光标所在行。
小写d:删除指定内容块。案例如下:
大写D:快捷,删除光标至行尾内容块。
小写x:向右删除字符,相当于del键。案例如下:
大写X:向左删除字符,相当于Backspace键。案例如下:
// 普通模式下非递归绑定按键
"vim.normalModeKeyBindingsNonRecursive": [
{ // 断行并进入编辑状态
"before": [
"K"
],
"commands": [
"lineBreakInsert"
],
"silent": true
},
]
编辑c:删除指定内容块后进编辑模式。案例如下:
大写C:快捷,删除含光标至行尾内容块后进编辑模式。
小写s:删除含光标处字符进编辑模式。案例如下:
大写S:快捷,删除光标所在行后进编辑模式。
小写p:在光标后粘贴内容。案例如下:
大写P:在光标前粘贴内容,用法和小写p一致。
小写r:替换光标处字符。案例如下:
大写R:进入替换模式
q字母,然后操作键盘,操作结束后再按q即表示宏录制完毕。例如:
@字母,重复宏记录的键盘操作。例如:
"小写字母
"字母
:将寄存器内容取出。例如:
m字母,记录当前光标的位置。例如:
标注位置后,进行翻页、跳转、移动光标,再按`字母,光标会迅速跳回到之前记录的位置。例如:
进入可视模式后按v或esc键可还原到普通模式
"vim.normalModeKeyBindingsNonRecursive": [
{ // 进入块选择模式
"before": [
"\\",
],
"commands": [
"extension.vim_ctrl+v"
]
},
]
我禁止vim使用ctrl,因为vscode本身有大量快捷键用了ctrl。为此另外增加了许多leader快捷操作。
"vim.leader": "" , // 绑定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": [],
// 插入模式下的非递归按键绑定
"vim.normalModeKeyBindingsNonRecursive": [
{ // 取消最近的撤销
"before": [
"" ,
"u"
],
"after": [
"" ,
]
},
]
"vim.normalModeKeyBindingsNonRecursive": [
{ // 全屏查找字符串
"before": [
"" ,
"/"
],
"after": [
"" ,
"" ,
"/"
]
},
]
"vim.normalModeKeyBindingsNonRecursive": [
{ // 全屏查找字符串
"before": [
"" ,
"s"
],
"after": [
"" ,
"" ,
"s"
]
},
]
"vim.normalModeKeyBindingsNonRecursive": [
{ // 复制一行
"before": [
"" ,
"p"
],
"after": [
"y",
"y",
"p",
]
},
]
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