gnome terminal 光标形状只能通过图形界面的 profile preferences 设置,选项包括 i-beam、block、underline,且仅对当前 profile 生效;setterm/tput 仅控制光标显隐而非形状,在纯 tty 有效;vim 需单独配置 .vimrc 实现模式化光标;cursor_style 环境变量在 ubuntu 默认终端中无效。

终端 GUI 界面里改光标形状(GNOME Terminal)
Ubuntu 默认终端(GNOME Terminal)的光标形状只能在图形界面中设置,不靠命令行或配置文件生效。打开终端后,按 Alt 键唤出隐藏菜单栏,选 Edit → Profile Preferences → Cursor shape,下拉选择:I-Beam(竖线)、Block(方块)、Underline(下划线)。改完直接生效,无需重启终端。
注意:这个设置只影响当前 profile;如果你创建了多个 profile(比如不同颜色主题),每个都要单独设。右键终端空白处 → Profiles → Profile Preferences 也能快速进入,比找菜单快。
为什么 setterm 或 tput 不影响光标形状
setterm -cursoron 和 tput cnorm 只控制光标「是否显示」,不是「什么形状」;它们操作的是底层 VT 终端的光标可见性开关,和 GNOME Terminal 这类图形终端模拟器的渲染逻辑无关。你在 SSH 连到纯 TTY(比如 Ctrl+Alt+F2)时用这些命令才真正起效。
常见误操作:在 GNOME Terminal 里执行 tput civis 后发现光标“消失”,其实是被隐藏了——再执行 tput cnorm 就回来,但形状仍是你在 Profile 里选的那个。
想让 Vim 插入模式显示竖线光标?得配 .vimrc
终端本身的光标形状和 Vim 内部光标是两套机制。即使你把终端设成 I-Beam,Vim 在普通模式下仍可能显示方块(取决于终端能力与 Vim 配置)。要让 Vim 插入模式显示竖线、普通模式显示方块,加这几行到 ~/.vimrc:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
if has('gui_running')
set guioptions+=a
else
if $TERM == 'xterm-256color' || $TERM == 'screen-256color'
let &t_SI .= '\e[5 q' " 插入模式:闪烁竖线
let &t_SR .= '\e[3 q' " 替换模式:下划线
let &t_EI .= '\e[1 q' " 退出插入模式:恢复块状
endif
endif
关键点:$TERM 值必须匹配(echo $TERM 查看),且终端需支持 DECSCUSR(ANSI 光标形状控制)。GNOME Terminal 3.36+ 支持,老版本可能无效。
别碰 CURSOR_STYLE 环境变量
网上有些教程让你往 ~/.bashrc 里写 export CURSOR_STYLE="underline",这在 Ubuntu 的 GNOME Terminal 中完全无效——它不是该终端识别的变量。这个变量只被极少数终端(如某些基于 libvte 的定制分支)或 shell(如 zsh 的部分插件)读取,主流发行版默认不处理。
真要脚本化控制光标行为(比如运行某程序时临时隐藏光标),用 tput civis + tput cnorm 是安全的;但想改形状,唯一可靠路径就是 Profile 设置或应用层(如 Vim)自行控制。
容易忽略的一点:Tilix、Konsole、xfce4-terminal 等第三方终端各自有独立的光标设置入口,不能复用 GNOME Terminal 的路径;它们也不共享 .bashrc 里的所谓 “光标变量”。










