目前我的 Tab 按键绑定如下,使用了 Neovim 的原生 snippet 功能,逻辑是:
- 如果有 snippet 区块能跳转的话,那么就直接跳出括号
- 否则,判断是否是括号的另外一边,如果是,直接跳出
- 否则,直接按照原来 tab 的逻辑执行
-- Keymap for snippetlocal function is_pair() local col = vim.fn.col('.') - 1 local next_char = vim.fn.getline('.'):sub(col + 1, col + 1) return next_char:match("[%)%]}>\"';`]") ~= nilendvim.keymap.set({ 'i', 's' }, '<Tab>', function() if vim.snippet.active({ direction = 1 }) then return '<cmd>lua vim.snippet.jump(1)<cr>' elseif is_pair() then -- Tabout vim.api.nvim_input('<Right>') else return '<Tab>' endend, { expr = true })vim.keymap.set({ 'i', 's' }, '<S-Tab>', function() if vim.snippet.active({ direction = -1 }) then return '<cmd>lua vim.snippet.jump(-1)<cr>' endend, { expr = true })