You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单个<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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:57:02