跳到主要内容

VSCode Vim 使用学习

1. 快捷键

1. 文件目录

快捷键功能
<space> + e开关目录树
o打开文件/打开文件目录
h折叠一个层级目录
d删除文件
a新建文件
A新建文件夹
r重命名文件
j下移动条目
k上移动条目

2. 常规动作

快捷键功能
<space> + o开关大纲
<space> + f搜索文件
<space> + F搜索字符(输入要搜索的字符后,按 tab 可切换到搜索结果,shift+tab 回到搜索框)
E打开左边标签页
R打开右边标签页
<leader> + q关闭当前编辑文件
<leader> + gq关闭当前编辑组
<ctrl> + h/j/k/l进入左边/下边/上边/右边窗口
<ctrl> + \开关终端
<ctrl> + p开关 panel

3. 代码导航

快捷键功能
<leader> + t在声明/定义间来回跳转 (c 和 cpp 项目,需要导出 compile_commands.json 文件)
<leader> + u查看代码引用(浮动窗)
<leader> + U查看代码引用(单独引用 panel)
<leader>+ in函数调用链
alt + oc/c++ 切换源文件和头文件
]]跳转到下一个函数头
][跳转到下一个函数尾
[[跳转到上一个函数头
[]跳转到上一个函数尾
gh查看函数签名+注释文档
<leader> + rn重命名符号
<space> + s搜索当前窗口下的符号 (vscode 的 @)
<space> + S搜索项目下的符号 (vscode #)

4. 代码诊断

快捷键功能
<leader> + dj下一个错误
<leader>+ dk上一个错误

5. Git 操作

快捷键功能
<leader> + j下一个 hunk
<leader> + k上一个 hunk
<leader> + hsstage hunk
<leader> + huunstage hunk
<leader> + hrreset hunk
<space> + g打开 git tab

6. Debug

快捷键功能
<leader> + db开关断点
<F5>开始调试
<F4>结束调试会话
<F6>stepover
<F7>stepinto
<F8>stepout

2. 配置

/* vim settings begin */
"vim.camelCaseMotion.enable": true,
"vim.easymotion": true,
"vim.foldfix": true, // to avoid fold open up autocamatically
"vim.sneak": false,
"vim.surround": true,
"vim.useCtrlKeys": true,
"vim.useSystemClipboard": true,
"vim.vimrc.enable": true,
"vim.vimrc.path": "$HOME/.vsvimrc",
"vim.handleKeys": {
"<C-a>": false,
"<C-f>": false,
"<C-i>": true,
"<C-o>": true,
"<C-r>": true,
"<C-s>": false,
"<C-v>": false,
"<C-c>": false,
"<C-x>": false,
"<C-w>": true,
"<C-u>": false,
"<C-d>": false
},
"vim.hlsearch": true,
"vim.incsearch": true,
"vim.leader": ";",
"vim.normalModeKeyBindings": [
{
// which key
"before": ["<space>"],
"commands": ["whichkey.show"]
}
],
"vim.normalModeKeyBindingsNonRecursive": [
{
"before": ["E"],
"after": ["g", "T"]
},
{
"before": ["R"],
"after": ["g", "t"]
},
{
"before": ["<leader>", "f"],
"commands": ["editor.action.formatDocument"]
},
{
"before": ["<leader>", "g", "q"],
"commands": ["workbench.action.closeEditorsInGroup"]
},
{
"before": ["<leader>", "u"],
"commands": ["editor.action.referenceSearch.trigger"]
},
{
"before": ["<leader>", "U"],
"commands": ["references-view.findReferences"]
},
{
"before": ["<leader>", "i", "n"],
"commands": ["references-view.showCallHierarchy"]
},
// -- run
{
"before": ["<leader>", "r"],
"commands": ["workbench.action.files.save", "workbench.action.debug.run"]
},
{
"before": ["<leader>", "d", "r"],
"commands": ["workbench.action.files.save", "workbench.action.debug.start"]
},
// -- debug
{
"before": ["<leader>", "d", "b"],
"commands": ["editor.debug.action.toggleBreakpoint"]
},
{
"before": ["<leader>", "d", "c"],
"commands": ["editor.debug.action.conditionalBreakpoint"]
},
// -- problem nav
// fix <C-d> and <C-u>
{
"before": ["<leader>", "d", "k"],
"commands": ["editor.action.marker.prev"]
},
{
"before": ["<leader>", "d", "j"],
"commands": ["editor.action.marker.next"]
},
// -- git hunk nav
{
"before": ["<leader>", "k"],
"commands": ["workbench.action.editor.previousChange", "editor.action.dirtydiff.previous"]
},
{
"before": ["<leader>", "j"],
"commands": ["workbench.action.editor.nextChange", "editor.action.dirtydiff.next"]
},
// git (un)stage
{
"before": ["<leader>", "h", "s"],
"commands": ["git.stage"]
},
{
"before": ["<leader>", "h", "u"],
"commands": ["git.unstage"]
},
{
"before": ["<leader>", "h", "r"],
"commands": ["git.revertSelectedRanges"]
},
// -- rename symbol
{
"before": ["<leader>", "r", "n"],
"commands": ["editor.action.rename"]
},
// search
{
"before": ["<leader>", "f", "w"],
"commands": ["extension.searchUnderCursor"]
},
// gg and G jump mark
{
"before": ["g", "g"],
"after": ["m", "a", "g", "g"]
}
],
"vim.visualModeKeyBindings": [
{
// which key
"before": ["<space>"],
"commands": ["whichkey.show"]
},
// repeatly indent in visual mode
{
"before": [">"],
"commands": ["editor.action.indentLines"]
},
{
"before": ["<"],
"commands": ["editor.action.outdentLines"]
}
],
"vim.visualModeKeyBindingsNonRecursive": [
{
"before": ["<leader>", "f"],
"commands": ["editor.action.formatSelection"]
},
{
// p action will not override clipboard content
"before": ["p"],
"after": ["p", "g", "v", "y"]
}
],
/* which key bindings */
"whichkey.bindings": [
{
"key": "p",
"name": "Show VSCode Command Panel",
"type": "command",
"command": "workbench.action.quickOpen"
},
{
"key": "e",
"name": "Show tree/explorer view",
"type": "conditional",
"bindings": [
{
"key": "",
"name": "default",
"type": "command",
"command": "workbench.view.explorer"
},
{
"key": "when:sideBarVisible && explorerViewletVisible",
"name": "Hide explorer",
"type": "command",
"command": "workbench.action.toggleSidebarVisibility"
}
]
},
{
"key": "o",
"name": "Outline",
"type": "command",
"command": "workbench.action.toggleAuxiliaryBar"
},
{
"key": "h",
"name": "bookmark",
"type": "command",
"command": "lineHighlightBookmark.toogleBookmarks"
},
{
"key": "g",
"name": "Source contrl",
"type": "command",
"command": "workbench.view.scm"
},
{
"command": "workbench.action.quickOpen",
"key": "f",
"name": "Find file",
"type": "command"
},
{
"command": "workbench.view.search",
"key": "F",
"name": "Search Word",
"type": "command"
},
{
"command": "search.action.openEditor",
"key": "w",
"name": "New Search Editor",
"type": "command"
},
{
"command": "workbench.action.gotoSymbol",
"key": "s",
"name": "Search document symbol",
"type": "command"
},
{
"command": "workbench.action.showAllSymbols",
"key": "S",
"name": "Search project symbol",
"type": "command"
}
],
"editor.lineNumbers": "relative"