如何用单个<leader>vn快捷键切换Vim行号显示功能的启用与禁用
Vim 单快捷键切换行号显示模式实现方案
你可以通过新增一个状态标记变量来记录当前行号模式的启用状态,合并两个函数为一个切换函数即可,完整代码如下:
1. 按键映射(仅保留一个即可)
nnoremap <silent> <leader>vn :call ToggleNumber()<CR>
2. 切换函数实现
" 全局状态变量,0代表未开启智能行号模式,1代表已开启 let g:number_toggle_status = 0 function! ToggleNumber() if g:number_toggle_status == 1 " 执行原NoNumber函数逻辑 set number! norelativenumber augroup numbertoggle autocmd! autocmd BufEnter,FocusGained,InsertLeave * set norelativenumber autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber augroup END let g:number_toggle_status = 0 else " 执行原Number函数逻辑 set number relativenumber augroup numbertoggle autocmd! autocmd BufEnter,FocusGained,InsertLeave * set relativenumber autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber augroup END let g:number_toggle_status = 1 endif endfunction
方案说明
- 用全局变量
g:number_toggle_status记录上次调用的功能,完全符合你「调用过Number就切NoNumber,反之切Number」的需求 - 如果你不想额外引入状态变量,也可以直接通过
&relativenumber判断当前相对行号的开启状态作为切换依据,但是如果有其他插件或手动修改了行号设置,可能会导致切换逻辑不符合预期,因此更推荐用状态变量的方案。
内容的提问来源于stack exchange,提问作者KarlsD
相关产品推荐
相关产品推荐

