进入noraml模式
- q[ 进入Normal
- Esc
- :wq 保存并退出
- :q! 退出不保存
移动游标和屏幕
- h 左
- j 下
- k 上
- l 右
- H 行首
- J 下5行
- K 上5行
- L 行尾
- e 下一个单词尾部(end)
- ge 上一个单词的尾部
- w 下一个单词的首部
- b 上一个单词的首部
- ctrl + d / f / e 向下移动屏幕 效果依此减弱
- ctrl + u / b / y 向上移动屏幕 效果依此减弱
- zz zt zb 将单词置于屏幕中间 、顶部、尾部
- [number] + gg / G 掉到(number行)、行首、行尾
单游标编辑
- i 插入至单词首部
- I 插入至行首
- a 插入至单词尾部
- A 插入至行尾
- o 插入至下一行
- O 插入至上一行
- d 删除保持normal模式
- c 删除进入insert模式
- x 剪切当前游标字符
- X 剪切当前游标前一个字符
- r 替换当前游标
- R 替换当前游标并且可以连续替换
- s 删除当前游标并立刻进入insert模式
- S 删除当前游标前一个字符并立刻进入insert模式
- y 复制
- p 粘贴
- u 撤销undo
- Ctrl + r 重做redo
多游标编辑
- v 进入多选(visual)模式
- V 行多选
- Ctrl + v 块多选
- o 在多选状态下,游标回到进入visual模式时的位置
- gv 重复上一次多选
- gh 提示帮助
- gc/C 单行、多行注释
- gb 重复使用可以同时选中多个相同的单词,然后一起替换
文本对象
- 语法
- operator + range + object
- 范围
- 对象
- b 表示[
- B 表示{
- t 表示XML标签
- w 表示单词
- s 表示句子
- p 表示段落
- 技巧(依赖插件vim-textobj-arguments)
vim-surround
- c + s + 待删除字符 + 替换字符
- d + s + 待删除字符
- y + s + [range] + 命中的字符 + 新增的字符
- 可视化 + S + 新增的字符
替换字符串
- 语法
- :[range]s/oldStr[regex]/str/[flag]
- range
- % 全文
- $ 最后一行
- number,number
- flag
- example
重构
- leader + fd 格式化文件
- leader + [ 折叠当前函数
- leader + vv 定义变量
- leader + ff 定义函数
- leader + rn 重命名
- cmd / ctrl + . 弹出快速修复
- cmd + i / ctrl + space 弹出修改建议
- opt / alt + up / down 将当前代码上、下移动
- opt / alt + backspace 向前删除整个变量
- opt / alt + ctrl + backspace 向前删除单个单词
- F8 跳转至错误处
- cmd / ctrl + F2 选中所有当前选中的单词
User Snippets
搜索查询
- f / F 移动至下、上一个char
- t / T 移动至一下、上个char的前一个字符
- /
or ? + [up] 向下、上全文搜索 [重复上一次搜索条件]
/child\b
/child\C
-
- leader + leader + w / b / e / ge / h / l / k 当前文件emtion模式
- ctrl + o / i 返回上一次、下一次搜索结果的位置
- :jumps 查看搜索历史
- cmd / ctrl + shift + f / j 全局搜索、增加搜索范围
- cmd / ctrl + p + [>#@:] 所搜文件【命令,函数,成员变量函数,排序】
- ctrl + tab 切换回最近打开的文件
窗口管理
- cmd / ctrl + shift + n 打开一个新窗口
- ctrl + r 打开一个项目
- cmd / ctrl + shift + w 关闭整个窗口
- <ctrl-w> + v / s 左右、垂直分屏tab
- <ctrl-w> + c / o 关闭当前、所有tab
- <ctrl-w> + hjklw 切换tab
- shift + 方向键 切换tab
文件管理
- a / A 新建文件、文件夹,在侧边栏区
- leader + n + f / d 新建文件、文件夹,在编辑区
- r 重命名文件
- d 删除文件
Plugins
重构插件
gui插件
Config
user/settings.json
"vim.easymotion": true,
"vim.useSystemClipboard": false,
"vim.leader": "<Space>",
"vim.handleKeys": { "<C-c>": false, "<C-x>": false },
"vim.normalModeKeyBindingsNonRecursive": [
{
"before": ["<Leader>", "n", "f"],
"commands": [
{
"command": "explorer.newFile"
}
]
},
{
"before": ["<Leader>", "v", "v"],
"commands": ["hocusPocus.createVariable"]
},
{
"before": ["<Leader>", "f", "f"],
"commands": ["hocusPocus.createFunction"]
},
{
"before": ["<Leader>", "n", "d"],
"commands": ["explorer.newFolder"]
},
{
"before": ["<Leader>", "r", "n"],
"commands": ["editor.action.rename"]
},
{
"before": ["<Leader>", "]"],
"commands": [
{
"command": "editor.unfold"
}
]
},
{
"before": ["<Leader>", "f", "d"],
"commands": ["editor.action.formatDocument"]
},
{
"before": ["<Leader>", "["],
"commands": [
{
"command": "editor.fold"
},
{
"command": "vim.remap",
"args": {
"after": ["$", "%"]
}
}
]
},
{
"before": ["<space>", ";"],
"commands": ["vspacecode.space"]
}
],
"vim.operatorPendingModeKeyBindings": [
{
"before": ["H"],
"after": ["^"]
},
{
"before": ["L"],
"after": ["g", "_"]
}
],
"vim.normalModeKeyBindings": [
{
"before": ["H"],
"after": ["^"]
},
{
"before": ["L"],
"after": ["g", "_"]
},
{
"before": ["J"],
"after": ["5", "j"]
},
{
"before": ["K"],
"after": ["5", "k"]
}
],
"vim.visualModeKeyBindings": [
{
"before": ["H"],
"after": ["^"]
},
{
"before": ["L"],
"after": ["g", "_"]
},
{
"before": ["J"],
"after": ["5", "j"]
},
{
"before": ["K"],
"after": ["5", "k"]
}
],
"vim.visualModeKeyBindingsNonRecursive": [
{
"before": ["<space>", ";"],
"commands": ["vspacecode.space"]
}
]
keybindings.json
{
"key": "ctrl+shift+u",
"command": "editor.action.transformToUppercase"
},
{
"key": "shift+alt+u",
"command": "editor.action.transformToLowercase"
},
{
"key": "ctrl+;",
"command": "workbench.view.explorer",
"when": "viewContainer.workbench.view.explorer.enabled"
},
{
"key": "ctrl+'",
"command": "workbench.action.focusFirstEditorGroup"
},
{
"key": "a",
"command": "explorer.newFile",
"when": "filesExplorerFocus && !inputFocus"
},
{
"key": "shift+a",
"command": "explorer.newFolder",
"when": "filesExplorerFocus && !inputFocus"
},
{
"key": "r",
"command": "renameFile",
"when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus"
},
{
"key": "d",
"command": "deleteFile",
"when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceReadonly && !inputFocus"
},
{
"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"]
}
},
{
"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": "ctrl+cmd+\\",
"command": "workbench.action.splitEditorUp"
}
参考资料