Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • 说明
  • Vim

    • 环境准备
    • vim normal 模式中文输入法切换问题
    • vim-01-存活下来
    • vim-02-掌握行相关的命令
    • vim-03-掌握 vim 的语法
    • vim-04-更有效率的处理单字符&undo&redo
    • vim-复习 -1
    • vim-05-掌握可视化模式
    • vim-06-文本对象
    • vim-07-在单文件中移动的更快
    • vim-08-掌握搜索命令
    • vim-复习 -2
    • vim-09-更高效的移动 - 想去哪里就去哪里
    • vim-10-认识数字&点的威力
    • vim-11-掌握多文件之间的跳转
    • vim-12-处理包裹字符的符号
    • vim-复习 -3
    • vim-13-替换字符
    • vim-14-掌握悬浮显示&大小写&注释
    • vim-15-掌握窗口的管理
    • vim-16-删除函数
      • 任务点
        • 转到括号
        • vim-indent-object:
        • 删除函数
      • 社群讨论
    • vim-复习 -4
    • vim-17-掌握宏
    • vim-18-调用 vscode 的命令
    • vim-复习 -5
  • VSCode

  • Chrome

  • iTerm

  • mac

  • Obsidian

  • lazygit

  • 学习双拼
  • Vim 技巧

  • 键盘侠
  • Vim
Henry
2022-06-19
目录

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"]
  }
],
1
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"]
  }
],
1
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"]
  }
]
1
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"]
}
1
2
3
4

# 社群讨论

daI 这个其实不止可以删除函数,if 判断,多行对象/数组...,只要是开头和结尾的缩进小于中间的缩进都可以用这个

是滴,我记得给大家演示了删除  if 语句

对,看到了。以前一直没有找到快速删除多行对象的方法,现在终于有了


如果函数上面还有多行注释,怎么一起删除呢?

对 这又是一种情况,删除一个函数还是比较复杂的     可以写个插件了


提示一下,不知道会不会有小伙伴不知道,在 vscode 中如果关闭有未保存内容的窗口时,会弹出对话框,这时如果按 enter,是指 保存,按 space 是指不保存

编辑 (opens new window)
#Vim
上次更新: 5/27/2023, 1:02:05 PM
vim-15-掌握窗口的管理
vim-复习 -4

← vim-15-掌握窗口的管理 vim-复习 -4→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式