临时开关行号用 :set nu/:set nonu;永久生效需在 ~/.vimrc 中添加 set nu;混合模式 :set number relativenumber 可同时显示绝对与相对行号。

怎么临时开关行号:用 :set nu 和 :set nonu
在已打开的 Vim 文件里,按 Esc 确保回到普通模式,再按 : 进入命令行模式,直接输命令即可生效,不需重启 Vim。
常见错误现象:
- 输完
:set nu没反应 → 忘了按回车; - 输成
:set nu=1或:set number on→ Vim 不认这种写法,会报错E474: Invalid argument; - 输完没看到行号 → 可能当前是分屏或折叠区域,行号只显示在主窗口左侧。
实际可用的开关命令只有这四组(任选其一):
-
:set number/:set nonumber -
:set nu/:set nonu
注意::set number! 是个切换开关(toggle),但很多人误以为它更“高级”,其实它只是语法糖,和手动判断状态再执行开/关效果一样,没必要强记。
为什么改 ~/.vimrc 才算真正“永久”生效
Vim 启动时会自动加载用户家目录下的 ~/.vimrc 文件,里面每行都是你在命令模式下敲过的命令。所以把 set nu 写进去,等效于每次打开 Vim 都自动执行一遍。
容易踩的坑:
- 文件不存在时直接
vim ~/.vimrc会新建一个空文件,但如果你手误写成~/.vimrcs或~/.vimrc.bak,Vim 完全不会读取; - 用
sudo vim /etc/vim/vimrc改系统级配置 → 后续普通用户启动 Vim 会读这个文件,但一旦你用非 root 用户编辑它,可能因权限问题保存失败; - 改完没生效 → 忘了退出并重开 Vim,或者误把配置写在注释符
"后面,变成被忽略的注释。
推荐做法:
- 执行
vim ~/.vimrc; - 插入新行,写入
set nu(不加引号、不加等号、不换行); - 按 Esc → 输入
:wq保存退出; - 新开一个终端,运行
vim测试。
相对行号 :set rnu 和混合模式的实际价值
绝对行号(:set nu)适合看日志、定位报错;相对行号(:set rnu)专为移动服务:光标所在行为 0,上下分别是 1、2……这样配合 5j、3k 就不用心算距离。
但单独开 rnu 有个明显缺点:不知道当前在哪一行(比如想跳到第 87 行,但左边全是相对数字)。这时候用混合模式:
-
:set number relativenumber(或简写:set nu rnu)→ 当前行显示绝对行号,其余行显示相对行号; - 关闭时必须同时关两个:
:set nonumber norelativenumber(:set nonu nornu); - 如果只关其中一个,比如
:set nonu而保留rnu,结果是只剩相对行号列,看起来像“行号消失了”。
这个组合不是炫技,而是真正在写脚本、查日志、快速跳转时最顺手的配置。
行号显示异常的三个典型原因
有时候明明写了 set nu,却看不到行号,别急着重装 Vim,先检查这几处:
-
set numberwidth=1被设得太小 → 行号列被压缩到看不见,可临时试:set numberwidth=4; - 开启了
:set conceallevel=2或类似折叠/隐藏设置 → 行号列可能被 conceal 特性吞掉,临时关掉试试:set conceallevel=0; - 终端宽度不足或用了 tmux 分屏 → Vim 有时会自动隐藏行号来腾出空间,可强制刷新视图:
:redraw!。
真正难调试的是多层配置叠加:比如 ~/.vimrc 里开了 nu,但又 source 了另一个插件配置,后者执行了 set nonu —— 这种情况得用 :verbose set nu? 查看最后是哪行配置覆盖了它。


















