分享我的 Vim 键位,以及在多个编辑器中配置键位的方法
2025-1-20 • 6min
键位列表
秉持少即是多的原则,我只会配置最需要的那些快捷键。
输入模式
功能 | 快捷键 | 缩写原意 |
---|---|---|
退出编辑 | jj |
命令模式
功能 | 快捷键 | 缩写原意 |
---|---|---|
保存+格式化 | sa | save |
保存+关闭当前文件 | wq | write quit |
快速修复 | qf | quick fix |
前往定义 | gd | go to definition |
查找引用 | gr | go to reference |
全局搜索 | gs | global search |
当前文件搜索 | cs | current search |
关闭当前文件 | x | |
向上移动 10 行 | <space> k | |
向下移动 10 行 | <space> j | |
向左移动 10 个字符 | <space> h | |
向右移动 10 个字符 | <space> l |
其他
功能 | 快捷键 | 缩写原意 |
---|---|---|
向上快速移动 | <space><space> k | |
向下 | <space><space> j | |
向左 | <space><space> h | |
向右 | <space><space> l |
分屏操作
功能 | 快捷键 | 缩写原意 |
---|---|---|
水平分屏 | <space>sx | split x |
垂直分屏 | <space>sy | split y |
关闭分屏 | <space>sc | split close |
在多个窗口间切换
功能 | 快捷键 | 缩写原意 |
---|---|---|
切换到左边窗口 | <space>sh | screen h |
切换到右边窗口 | <space>sl | |
切换到上边窗口 | <space>sk | |
切换到下边窗口 | <space>sj |
VSCode 和 NeoVim 配置
VSCode 有 VSCode-NeoVim 插件,可以在 VSCode 中使用 NeoVim 作为后端。
因此 VSCode 可以直接使用 NeoVim 的配置。
NeoVim 使用~/.config/nvim/init.vim
作为配置文件。
需要注意的是,关闭文件、lsp 修复提示等,在两个编辑器中执行不同的操作,我们可以使用 Lua 的条件语句来做判断。
if vim.g.vscode
then
-- vscode 的配置
else
-- neovim 的配置
end
完整的配置文件如下:
-- 命令模式键位配置
if vim.g.vscode then
-- VSCode 特定配置
vim.keymap.set('n', 'sa', '<Cmd>call VSCodeCall("workbench.action.files.save")<CR><Cmd>call VSCodeCall("editor.action.formatDocument")<CR>') -- 保存文件并格式化
vim.keymap.set('n', 'wq', '<Cmd>call VSCodeCall("workbench.action.files.save")<CR><Cmd>call VSCodeCall("workbench.action.closeActiveEditor")<CR>') -- 保存并关闭文件
vim.keymap.set('n', 'qf', '<Cmd>call VSCodeCall("editor.action.quickFix")<CR>') -- 显示快速修复建议
vim.keymap.set('n', 'gd', '<Cmd>call VSCodeCall("editor.action.revealDefinition")<CR>') -- 跳转到定义
vim.keymap.set('n', 'gr', '<Cmd>call VSCodeCall("editor.action.goToReferences")<CR>') -- 查看引用
vim.keymap.set('n', 'gs', '<Cmd>call VSCodeCall("workbench.action.findInFiles")<CR>') -- 全局搜索
vim.keymap.set('n', 'cs', '<Cmd>call VSCodeCall("actions.find")<CR>') -- 当前文件内搜索
vim.keymap.set('n', 'x', '<Cmd>call VSCodeCall("workbench.action.closeActiveEditor")<CR>') -- 关闭当前文件件
-- 分屏操作键位
vim.keymap.set('n', '<space>sx', '<Cmd>call VSCodeCall("workbench.action.splitEditorDown")<CR>') -- 水平分屏
vim.keymap.set('n', '<space>sy', '<Cmd>call VSCodeCall("workbench.action.splitEditorRight")<CR>') -- 垂直分屏
vim.keymap.set('n', '<space>sc', '<Cmd>call VSCodeCall("workbench.action.closeActiveEditor")<CR>') -- 关闭当前分屏
-- 窗口切换键位
vim.keymap.set('n', '<space>sh', '<Cmd>call VSCodeCall("workbench.action.focusLeftGroup")<CR>') -- 切换到左边窗口
vim.keymap.set('n', '<space>sl', '<Cmd>call VSCodeCall("workbench.action.focusRightGroup")<CR>') -- 切换到右边窗口
vim.keymap.set('n', '<space>sk', '<Cmd>call VSCodeCall("workbench.action.focusAboveGroup")<CR>') -- 切换到上边窗口
vim.keymap.set('n', '<space>sj', '<Cmd>call VSCodeCall("workbench.action.focusBelowGroup")<CR>') -- 切换到下边窗口
else
-- NeoVim 原生配置
-- 输入模式键位配置
vim.keymap.set('i', 'jj', '<Esc>') -- 使用 jj 快速退出输入模式
vim.keymap.set('n', 'sa', ':w<CR>') -- 保存文件
vim.keymap.set('n', 'wq', ':wq<CR>') -- 保存并关闭文件
vim.keymap.set('n', 'qf', ':lua vim.lsp.buf.code_action()<CR>') -- 显示 LSP 快速修复建议
vim.keymap.set('n', 'gd', ':lua vim.lsp.buf.definition()<CR>') -- 跳转到定义
vim.keymap.set('n', 'gr', ':lua vim.lsp.buf.references()<CR>') -- 查看引用
vim.keymap.set('n', 'gs', ':lua require("telescope.builtin").live_grep()<CR>') -- 使用 telescope 进行全局搜索
vim.keymap.set('n', 'cs', ':lua require("telescope.builtin").current_buffer_fuzzy_find()<CR>') -- 使用 telescope 在当前文件中搜索
vim.keymap.set('n', 'x', ':q<CR>') -- 关闭当前文件
-- 分屏操作键位
vim.keymap.set('n', '<space>sx', ':split<CR>') -- 水平分屏
vim.keymap.set('n', '<space>sy', ':vsplit<CR>') -- 垂直分屏
vim.keymap.set('n', '<space>sc', ':close<CR>') -- 关闭当前分屏
-- 窗口切换键位
vim.keymap.set('n', '<space>sh', '<C-w>h') -- 切换到左边窗口
vim.keymap.set('n', '<space>sl', '<C-w>l') -- 切换到右边窗口
vim.keymap.set('n', '<space>sk', '<C-w>k') -- 切换到上边窗口
vim.keymap.set('n', '<space>sj', '<C-w>j') -- 切换到下边窗口
end
-- 移动相关键位配置
vim.keymap.set('n', '<space>k', '10k') -- 向上移动 10 行
vim.keymap.set('n', '<space>j', '10j') -- 向下移动 10 行
vim.keymap.set('n', '<space>h', '10h') -- 向左移动 10 个字符
vim.keymap.set('n', '<space>l', '10l') -- 向右移动 10 个字符
-- 快速移动键位(使用 Hop)
vim.keymap.set('n', '<space><space>k', ':HopLineStartBC<CR>') -- 向上移动
vim.keymap.set('n', '<space><space>j', ':HopLineStartAC<CR>') -- 向下移动
vim.keymap.set('n', '<space><space>h', ':HopWordBC<CR>') -- 向左移动
vim.keymap.set('n', '<space><space>l', ':HopWordAC<CR>') -- 向右移动
注意,使用 jj 或 jk 映射退出编辑模式,需要在 VSCode 配置文件中添加如下配置:
{
"vscode-neovim.compositeKeys": {
"jj": {
"command": "vscode-neovim.escape",
},
},
}
NeoVim 相关配置涉及到 Lua 语言、Hop、LSP 插件等内容,因为这篇文章主要讲快捷键,所以不作展开。