vim-16-删除函数
# 任务点
# 转到括号
%
: 转到括号
%
命令允许我们在一组开、闭括号间跳转(参见:h %),它可作用于 ()、{}以及 [],如下例所示:
Vim 在发布时带了一个名为 matchit 的插件,它增强了 %
命令的功能。激活此插件后,%
命令就可以在配对的关键字间跳转。例如,在一个 HTML 文件里,用 %
命令可以在开标签和闭标签间跳转
但 VSCodeVim
并不支持此功能,我们可以使用此插件来完成相同的功能:redguardtoo/vscode-matchit: Jump between matching HTML tags and brackets smartly in VS Code. It's ported from Vim matchit by Benji Fisher (opens new window)
默认跳转的快捷键是 cmd + shift + \
,我们可以改键使其更方便使用
"vim.normalModeKeyBindings": [
// 调用 matchit 的 api,匹配 HTML 标签、括号
{
"before": ["<Leader>", "%"],
"commands": ["extension.matchitJumpItems"]
},
{
"before": ["<Leader>", "v", "%"],
"commands": ["extension.matchitSelectItems"]
}
],
2
3
4
5
6
7
8
9
10
11
# vim-indent-object (opens new window):
将当前缩进级别的代码块视为文本对象,原理就是根据缩进来操作的,只要缩进范围大于等于光标当前行,都会被当成一个文本对象
<operator>ii
: 操作当前缩进级别的代码块<operator>ai
: 操作当前缩进级别的代码块和上面一行<operator>aI
: 操作当前缩进级别的代码块和上下两行
# 删除函数
dap
: 基于段落 text-object; 如果这个函数体内没有空行,函数整体上下都有空行,可以删除,否则不行daI
: 基于 vim-indent-object; 代码缩进正常(经过格式化),需要在函数体内执行,不能在函数头执行;可以改键:ai -> aI; 这个其实不止可以删除函数,if 判断,多行对象/数组...,只要是开头和结尾的缩进小于中间的缩进都可以用这个V$%d
: 基于 %; 必须在函数头执行;V 先选中当前行,$
移动到行尾,光标在 {,% 匹配结束的 },d 删除;当函数的参数太多导致换行后,$
移动到行尾时,光标是在 (,% 匹配到是 ),我们还需要执行$%
来匹配结束的 }; 可以改键:<leader> d f
->V$%d
ai -> aI 改键:
// pending 模式改键
"vim.operatorPendingModeKeyBindings": [
{
"before": ["a", "i"],
"after": ["a", "I"]
}
],
// visual 模式改键
"vim.visualModeKeyBindings": [
{
"before": ["a", "i"],
"after": ["a", "I"]
}
],
2
3
4
5
6
7
8
9
10
11
12
13
14
<leader> d f
-> V$%d
改键:
// normal 模式改键
"vim.normalModeKeyBindings": [
{
"before": ["<Leader>", "d", "f"],
"after": ["V", "$", "%", "d"]
},
{
"before": ["<Leader>", "d", "d", "f"],
"after": ["V", "$", "%", "$", "%", "d"]
}
]
2
3
4
5
6
7
8
9
10
11
崔大写了一个基于 AST 语法树来删除函数的插件:Delete Function - Visual Studio Marketplace (opens new window)
我们就不用上面的了,也改一下按键:
{
"before": ["<Leader>", "d", "f"],
"commands": ["delete-function.deleteFunction"]
}
2
3
4
# 社群讨论
daI 这个其实不止可以删除函数,if 判断,多行对象/数组...,只要是开头和结尾的缩进小于中间的缩进都可以用这个
是滴,我记得给大家演示了删除 if 语句
对,看到了。以前一直没有找到快速删除多行对象的方法,现在终于有了
如果函数上面还有多行注释,怎么一起删除呢?
对 这又是一种情况,删除一个函数还是比较复杂的 可以写个插件了
提示一下,不知道会不会有小伙伴不知道,在 vscode 中如果关闭有未保存内容的窗口时,会弹出对话框,这时如果按 enter,是指 保存,按 space 是指不保存