我们知道,Vim 支持配置是否显示行号,对这个行号认知,我们一般指的是绝对行号。其实 Vim 支持配置两种行号模式:number(绝对行号) 和 relativenumber(相对行号)。今天,基于 vim 行号介绍一个提升其使用效率的小技巧,混合使用 number 和 relativenumber。
" 显示行号 set nu " set number 的缩写形式 " 隐藏行号 set nonumber " 无缩写 set nonu " 缩写形式基于行号 number,实现的一些快捷操作,如:
.替换指定范围文本 :10,20s/hello/world/g;
set rnu " set relativenumber 的缩写形式" # 堆代码 duidaima.com " 隐藏相对行号 set norelativenumber set nornu " set norelativenumber 的缩写形式特别说明:如果 number 和 relativenumber 同时开启的情况下,当前所在行显示绝对行号,而其他行则显示相对行号。
augroup numbertoggle autocmd! autocmd BufEnter,FocusGained,InsertLeave,WinEnter * if &nu && mode() != "i" | set rnu | endif autocmd BufLeave,FocusLost,InsertEnter,WinLeave * if &nu | set nornu | endif augroup END或者:
local augroup = vim.api.nvim_create_augroup("numbertoggle", {}) vim.api.nvim_create_autocmd({ "BufEnter", "FocusGained", "InsertLeave", "CmdlineLeave", "WinEnter" }, { pattern = "*", group = augroup, callback = function() if vim.o.nu and vim.api.nvim_get_mode().mode ~= "i" then vim.opt.relativenumber = true end end, }) vim.api.nvim_create_autocmd({ "BufLeave", "FocusLost", "InsertEnter", "CmdlineEnter", "WinLeave" }, { pattern = "*", group = augroup, callback = function() if vim.o.nu then vim.opt.relativenumber = false vim.cmd "redraw" end end, })注意下,这里加了个限制,只有在启动 number 的情况下,才会按模式切换 relativenumber。