Vim-Vscode

221 阅读1分钟

基础

移动

  • h:左
  • j:下
  • k:上
  • l:右
  • e:移动到单词的结尾
  • b:移动到上一个单词的开头
  • w:移动到单词的开头
  • ge:移动到上一个单词的结尾

行相关移动

行首

  • 0:移动到行首
  • ^:移动到非 blank 字符的位置

行尾

  • $:移动到行尾
  • g_:本行最后一个不是不包含 blank 字符的位置

改键

 "vim.normalModeKeyBindings": [
    {
      "before": ["H"],
      "after": ["^"]
    },
    {
      "before": ["L"],
      "after": ["g", "_"]
    }
  ],   

输入

  • i:光标前
  • a:光标后
  • A:行后输入
  • I:行首输入
  • O:行前输入
  • o:行后输入

文本操作

  • yy:复制当前行
  • p:粘贴
  • dd:删除

Vim 语法

操作符➕动作

  • 操作符

    • d:删除
    • c:删除并进入 insert 模式
    • y:复制
  • 组合

    • dL:删除到行尾
    • dH:删除到行首
    • dgg:删除以上的文本
    • dG:删除以下的文本
    • cw:删除当前的单词
    • ea:在当前结尾处添加

处理单字符

  • x:删除当前光标的字符
  • X:删除当前光标前面的一个字符
  • s:删除当前光标的字符并进入 insert 模式
  • S 删除当前光标所在行并进入 insert 模式(常用)
  • r:替换一个字符
  • R:替换多个字符
  • 撤销:进入插入模式开始,直到返回普通模式,这期间的都是一次修改
    • u:撤销
    • C-r:恢复

可视化模式

  • v:字符
  • V:行
  • 块:Ctrl + v
  • o:切换可视化区域的光标位置
  • gv:回到上一次选择的区域

跨多行编辑

利用可视化区域的能力以及插入操作,可以进行跨多行编辑

  1. 选中多行按下 A,可以在多行末尾操作
  2. 选中多行按下 I,可以在多行行首操作

文本对象

  • 操作符 +(内部/外部)+ 文本对象

  • 可视化模式 +(内部/外部)+ 文本对象

  • 内部:i

  • 外部:a

对象

  • w:一个单词
  • (:括号
  • [: 中括号
  • {:花括号
  • <:尖括号
  • t:xml 标签
  • ":引号
  • s:一个句子
  • p:一个段落

组合

  • ciw:删除一个单词并进入编辑模式
  • ci(:删除括号内的内容并进入编辑模式
  • ca(:删除整个括号的内容并进入编辑模式

vim-textobj-arguments

  • ia:不包含分隔符
  • aa:包含分隔符

使用:

  • daa:删除第一个参数
  • cia:修改一个参数

vim-textobj-entire

  • ae:删除当前文本所有内容
  • ie:删除当前文本所有内容,但是不包含前面和后面的空格

滚动

  • zz:当前行置于屏幕的中央
  • zt:当前行置于屏幕的最上方
  • zb:当前行置于屏幕的底部
  • gg:跳到文件首
  • G:跳到文件尾
  • 行数+gg:跳到指定行
  • 行数+G:跳到指定行

滚动一屏

  • C-f:向下
  • C-b:向上

半屏幕

{
  "before": [
    "J"
  ],
  "after": [
    "5",
    "j"
  ]
},
{
  "before": [
    "K"
  ],
  "after": [
    "5",
    "k"
  ]
}

搜索

  • f:(行内)正向移动到下一个查找字符的所在之处
  • F:(行内)反向移动到上一个查找字符的所在之处
  • t:(行内)正向移动到下一个查找字符的所在之处的前一个字符
  • T:(行内)反向移动到下一个查找字符的所在之处的后一个字符
  • /:(全局):向前查找
  • ?:(全局):向后查找
  • n/N:下一个/上一个全局查找的内容
  • /+方向键:查看搜索历史
  • /#:向上查,严格匹配,在搜索后按下#号
  • /*:向下查,严格匹配
  • ;:在指定查找的状态下,可以切换到下一个查找的字符
  • ,:在指定查找的状态下,可以切换到上一个查找的字符

flashVim快速搜索移动

github.com/cuixiaorui/…

基础使用

f+搜索的字符+label

支持操作符

例如:v+f,直接选中到某个 label

上一次的搜索

f+回车

配置

开启

"vim.flash.flash": true

忽略大小写

 "vim.flash.ignorecase": false,

设置 label 的背景色

 "vim.flash.backgroundColor": “#ccff88”,

文件跳转

  • m+小写字母:单文件(标记)

  • m+大写字母:多文件(标记)

  • 'm/M:跳转到标记

  • `m/M:更精准跳转

  • gd:跳转到定义的地方

  • l:展开和收缩

  • h:跳转到当前的定义条

  • C-i:向前跳转

  • C-o:向后跳转

包裹字符的符号

  • 改变现在的符号:cs+符号+替换后的
  • 添加符号ys+符号+范围(例如 ys + iw + { 当前单词加上花括号)
  • 删除符号:ds + 符号

字符替换

语法: :范围s/要被替换的字符/替换后的字符/flag(可选)

范围:$行尾,% 全局。number,number 行范围

flag:g 全局

例如:

  • :%s/node/nnnn,全文的node 替换成 nnnn

悬浮显示/大小写/注释

  • gh:悬浮显示
  • gu:小写
  • gU:大写(gUiw单词变为大写)
  • gc:单行注释
  • gC:多行注释

窗口管理

需要先按 C-w 才能进入窗口管理模式

新建窗口

  • v:左右
  • s:上下

窗口切换

  • hjkl

关闭窗口

  • c

只保留当前窗口关闭其他的窗口

  • o

利用vscode改键完成移动

修改 keybinds.json

 {
   "key": "shift+left",
   "command": "vim.remap",
   "when": "vim.mode == 'Normal'",
   "args": {
    "after": ["<c-w>", "h"]
   }
  },

  {
   "key": "shift+right",
   "command": "vim.remap",
   "when": "vim.mode == 'Normal'",
   "args": {
    "after": ["<c-w>", "l"]
   }
  },
  {
   "key": "shift+up",
   "command": "vim.remap",
   "when": "vim.mode == 'Normal'",
   "args": {
    
    "after": ["<c-w>", "k"]
   }
  },
  {
   "key": "shift+down",
   "command": "vim.remap",
   "when": "vim.mode == 'Normal'",
   "args": {
    "after": ["<c-w>", "j"]
   }
  },

vscode 命令

格式化文档和重命名

  "vim.normalModeKeyBindingsNonRecursive": [
    {
      "before": ["<Leader>", "f", "d"],
      "commands": ["editor.action.formatDocument"]
    },
    {
      "before": ["<Leader>", "r", "n"],
      "commands": ["editor.action.rename"]
    },
  ],

折叠和展开

    {
      "before": ["<Leader>", "]"],
      "commands": [{
          "key": "alt+cmd+]",
          "command": "editor.unfold",
          "when": "editorTextFocus && foldingEnabled"
        }]
    },
    {
      "before": ["<Leader>", "["],
      "commands": [
        {
          "command": "editor.fold"
        },
        {
          "command": "vim.remap",
          "args": {
            "after": ["$", "%"]
          }
        }
        
      ]
    }

Vscode相关快捷键

  {
    "key": "ctrl+;",
    "command": "workbench.action.terminal.new",
    "when": "terminalProcessSupported || terminalWebExtensionContributedProfile"
  },
  {
    "key": "ctrl+'",
    "command": "workbench.action.focusFirstEditorGroup"
  },
  {
    "key": "f",
    "command": "explorer.newFile",
    "when": "filesExplorerFocus && !inputFocus"
  },
  {
    "key": "shift+f",
    "command": "explorer.newFolder",
    "when": "filesExplorerFocus && !inputFocus"
  },
  {
    "key": "r",
    "command": "renameFile",
    "when": "filesExplorerFocus && foldersViewVisible && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
  },
  {
    "key": "d",
    "command": "deleteFile",
    "when": "filesExplorerFocus && foldersViewVisible && !explorerResourceReadonly && !inputFocus"
  }