本章介绍如何在 Neovim
中配置快捷键
在 init.vim
中添加以下代码
" 快捷键映射
lua require('keybindings')
这里表示加载 lua/keybindings.lua
文件,我们统一在这个文件里设置快捷键。
leader key
是你常用的前缀,我通常设置为 空格
vim.g.mapleader = " "
vim.g.maplocalleader = " "
后边定义快捷键看到 <leader>
就表示 空格
vim.api.nvim_set_keymap()
Neovim
使用上边的指令设置快捷键,详细信息见这里。
-- 保存本地变量
local map = vim.api.nvim_set_keymap
local opt = {noremap = true, silent = true }
-- 之后就可以这样映射按键了
-- map('模式','按键','映射为XX',opt)
normal
模式本身就是快捷键模式,而在这里定义的相当于是 快捷键的快捷键 , 所以一定是非常常用的按键组合, 或者是通过某个键调用某些命令。
因人而异,我用的快捷键不多,介绍一下,抛砖引玉,你有什么常用的快捷键欢迎留言告诉我。
浏览代码的时候,我最常用 ctrl + u
/ ctrl + d
移动光标滚动代码,
u
和 p
表示 up翻页
和 down翻页
。
j
/ k
移动太慢, ctrl + u
/ ctrl + d
默认移动半屏,翻太快,一不留神就不知道翻到哪了
我喜欢把 ctrl + u
/ ctrl + d
设置成移动 9 行,演示:
map("n", "<C-u>", "9k", opt)
map("n", "<C-d>", "9j", opt)
为什么是 9 行呢,因为刚好适合我,尤其是命令行全屏的时候,多了我经常找不到跳到哪了,少了移动太慢。
第一个参数 v
表示 visual 模式
map('v', '<', '<gv', opt)
map('v', '>', '>gv', opt)
我习惯把所有分屏相关的操作都放在 s + 某个按键
,s
表示 split
。
alt + hjkl
在窗口之间跳转。 演示:
sv
水平分屏sh
垂直分屏sc
关闭当前分屏 (c = close)so
关闭其他分屏 (o = other)s>
s<
s=
sj
sk
分屏比例控制
map("n", "sv", ":vsp<CR>", opt)
map("n", "sh", ":sp<CR>", opt)
map("n", "sc", "<C-w>c", opt)
map("n", "so", "<C-w>o", opt) -- close others
-- 比例控制(不常用,因为支持鼠标拖拽)
map("n", "s.", ":vertical resize +20<CR>", opt)
map("n", "s,", ":vertical resize -20<CR>", opt)
map("n", "s=", "<C-w>=", opt)
map("n", "sj", ":resize +10<CR>",opt)
map("n", "sk", ":resize -10<CR>",opt)
我使用 alt + hjkl
在窗口之间跳转
map("n", "<A-h>", "<C-w>h", opt)
map("n", "<A-j>", "<C-w>j", opt)
map("n", "<A-k>", "<C-w>k", opt)
map("n", "<A-l>", "<C-w>l", opt)
水平分屏很常用,比如 svgd
命令相当于 打开右侧窗口进入方法的定义,看完可以随手 sc
关闭掉。
本文到此结束了,下边还有给插件的快捷键,可以大概看一下,装插件的时候再细说。
--插件快捷键
-- Telescope
map("n", "<C-p>", ":Telescope find_files<CR>", opt)
map("n", "<leader>f", ":Telescope find_files<CR>", opt)
map("n", "<leader>g", ":Telescope live_grep<CR>", opt)
-- nvimTree
map('n', '<C-n>', ':NvimTreeToggle<CR>', opt)
-- bufferline 左右切换
map("n", "<C-h>", ":BufferLineCyclePrev<CR>", opt)
map("n", "<C-l>", ":BufferLineCycleNext<CR>", opt)
pluginKeys = {}
-- 代码注释插件
-- see ./lua/plugin-config/comment.lua
pluginKeys.comment = {
-- normal 模式
toggler = {
line = '<leader>c',
block = '<leader>bc',
},
-- visual 模式
opleader = {
-- ctrl + /
line = '<C-_>',
block = 'bc',
},
}
-- lsp 快捷键设置
-- ./lua/lsp/language_servers.lua
pluginKeys.lsp_on_attach = function(client, buffer)
local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
--- Mappings.
local opts = { noremap=true, silent=true }
buf_set_keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts)
buf_set_keymap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts)
buf_set_keymap('n', 'gh', '<cmd>lua vim.lsp.buf.hover()<CR>', opts)
-- buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
buf_set_keymap('n', '<F2>', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
buf_set_keymap('n', 'ge' , '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
buf_set_keymap('n', 'gpe', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
buf_set_keymap('n', '<leader>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts)
buf_set_keymap('n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
end
return pluginKeys
也可以先看一下完整文件。
下一章会介绍插件安装,和使用。
- 下一章: Neovim 插件管理与配置
- 回首页