VIM | 提升Vscode中Vim窗口管理效率:窗口管理技巧与配置思路分享(适合前端使用)

1,500 阅读4分钟

Vim中的窗口管理

Vim中的窗口管理大部分是ctrl + w + 其他的快捷键的组合的方式,当然也有类似:sp这样的命令的方式

新建窗口

  • ctrl + w + v:在当前窗口的右侧新建分屏窗口(垂直分割,对应左右切分)
  • ctrl + w + s:在当前窗口的下方新建分屏窗口(水平分割,对应上下切分)

窗口切换

  • ctrl + w + h/j/k/l:以当前光标所在的窗口为基准,切换到对应上下左右方向的窗口
  • ctrl + w + w:打开多个窗口的时候,再不同的窗口之间进行循环切换

关闭窗口

  • ctrl + w + c:关闭当前窗口
  • ctrl + w + o:保留当前光标所在窗口,关闭其他窗口

扩展阅读(了解)

  • :new:创建空白分屏
  • :vsplit/:vsp [filename]:垂直分屏,与ctrl + w + v效果一样
  • :split/:sp [filename]:水平分屏,和ctrl + w + s效果一样
    • 两个命令后面都可以选择跟上文件路径,比如我要垂直分屏的情况下打开test文件夹下的test.txt文件,对应的命令就是:vsp text/text.txt,并且这里路径和文件名都需要写完整。
  • :only:这个命令对应的是 保留当前光标所在窗口,关闭其他窗口 这个功能,对应的快捷键为ctrl + w + o
  • 调整分屏尺寸:
    • ctrl + w+<:左
    • ctrl + w+>:右
    • ctrl + w++:上
    • ctrl + w+-:下
    • ctrl + w+=:全部恢复均等大小

Vscode中的窗口管理

补充:这块的内容可能根据你使用系统会有一定的差异,比如因为Vscode的更新,同样的功能对应的快捷键会有变化,所以推荐自己到Vscode的按键设定界面,手动确认下对应功能的快捷键组合。

看完Vim中的窗口管理,如果觉得Vim的窗口管理快捷键比较繁琐,也可以考虑使用自己配置+vscode内置快捷键的组合进行改建的方案,下面就先来介绍下Vscode中的窗口管理方式吧!

新建窗口

  • ctrl + \:在当前窗口的右侧新建分屏窗口(垂直分割)
  • ctrl + k , ctrl + \(当前版本Vscode的默认配置,个人推荐改键):在当前窗口的下方新建分屏窗口(水平分割)

考虑到不同系统,可能不一样推荐在Vscode里的按键设置里面查看对应的功能,下面是我在Vscode中确认到的配置选项: image.png

个人推荐将 在当前窗口的下方新建分屏窗口(水平分割) 这个功能的快捷键功能改成ctrl + shift + \

image.png

关闭分组

比如当前处于normal模式下,现在打开了两个分组:

image.png

image.png

如果现在使用ctrl + w + c这个快捷键组合(当前光标在第一分组的ch07这个文件中),你可以发现对应的会触发关闭第一分组ch07这个文件窗口,并不能关闭整个第一分组,如果要关闭整个第一分组,推荐的方式是使用Vscode中自带的快捷键ctrl + k , w来关闭当前光标所在的分组:

image.png

推荐的方案

下面是我个人的配置方案:

  • 新建窗口:
    • ctrl + \
    • ctrl + shift + \
  • 关闭窗口:
    • 如果是mac平台,使用command + w

    • 如果是windows平台,可能会遇到 vscode 的 ctrl + w 和 vim 的 ctrl + w 冲突的问题,对应的解决方案

      • 方案1: 在配置文件setting.json中加入关闭窗口的处理即可
      "vim.normalModeKeyBindingsNonRecursive": [
              {
                      "before": ["<C-i>"], // 这里的 <C-i> 你可以随意的替换
                      "commands" : ["workbench.action.closeActiveEditor"],
              }
      ]
      
      • 方案2:在配置文件中,通过easymotion插件来处理关闭窗口
      "vim.normalModeKeyBindingsNonRecursive": [
              // 关闭当前窗口
              {
                      "before": ["<leader>", "w"], // 这里的 w 你可以随意的替换
                      "commands": ["workbench.action.closeActiveEditor"]
              },
      ]
      
      • 方案3:这个方案的思路是主动呼出把ctrl + w的功能还给Vscode处理,使用方式为按下Alt后再按ctrl + w,通过按下Alt激活菜单栏上的快捷键,这个时候的快捷键都会变成Vscode处理,而不是vim插件处理,所以这个时候能正常触发Vscode中关闭当前窗口的这个行为。
    • 关闭分组:ctrl + k , w

    • 关闭其他窗口,保留当前光标所在窗口:ctrl + w + o

    • 窗口切换:

      • 多窗口多快速切换,修改keybindings.json
      // shift + ctrl + hjkl 进行窗口快速切换
      {
        "key": "shift+ctrl+h",
        "command": "vim.remap",
        "when": "vim.mode == 'Normal'",
        "args": {
          "after": ["<c-w>", "h"]
        }
      },
      {
        "key": "shift+ctrl+l",
        "command": "vim.remap",
        "when": "vim.mode == 'Normal'",
        "args": {
          "after": ["<c-w>", "l"]
        }
      },
      {
        "key": "shift+ctrl+k",
        "command": "vim.remap",
        "when": "vim.mode == 'Normal'",
        "args": {
          "after": ["<c-w>", "k"]
        }
      },
      {
        "key": "shift+ctrl+j",
        "command": "vim.remap",
        "when": "vim.mode == 'Normal'",
        "args": {
          "after": ["<c-w>", "j"]
        }
      },
      
      • 单个分组中的tab快速切换,修改keybindings.json
        // 切换到上一个选项卡
        {
          "key": "ctrl+alt+,",
          "command": "workbench.action.previousEditor"
        },
        // 切换到下一个选项卡
        {
          "key": "ctrl+alt+.",
          "command": "workbench.action.nextEditor"
        },
      

参考资料