vim + tmux下的光标形状


14

在Cygwin下的tmux中运行vim时,如何具有不同的光标形状?

没有tmux,这些行就足以实现我想要的功能:

let &t_SI = "\e[5 q"
let &t_EI = "\e[2 q"

但是以某种方式我的tmux打破了它-无论我处于哪种vim模式,光标都具有块形状。

我的规格:

  • Windows 7 x64
  • Cygwin x86
  • TMUX 1.9a
  • Vim 7.4.726(使用+ cursorshape编译)
  • 终端仿真器:minty 1.1.3
  • 在Cygwin Terminal或Cmder中使用(无论哪种方式,光标形状仅在不使用TMUX的情况下都有效)
  • echo $TERM给我screen-256color(在TMUX和它的外面,因为我有export TERM=screen-256color我的.bashrc
  • .tmux.conf 包含:
    set -g default-terminal "screen-256color" setw -g xterm-keys on

我已经尝试过但没有成功的东西:

  • export TERM=xterm
  • export TERM=vt100
  • “上栏右击>选项>外貌>光标”(它永久改变光标,vim的模式依然不改的话)

用'+ cursorshape'功能编译的Vim?
Alex Kroll 2015年

检查终端设置。而这个问题类似于 superuser.com/questions/634326/...
亚历克斯·克罗尔

您正在使用哪个终端仿真器?您是否尝试过类似let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1;BlinkingCursorEnabled=1\x7\<Esc>\\"let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0;BlinkingCursorEnabled=0\x7\<Esc>\\"
jjaderberg 2015年

@jjaderberg iTerm的转义序列?某些注意事项仅在iTerm中有效: iTerm Doc > iTerm2支持几种非标准的转义码。它们可能无法在tmux或屏幕中正常工作,并且可能对其他终端仿真器产生未知的影响。请谨慎操作。
亚历克斯·克罗尔

1
我已经检查我的柔软一个更多的时间和所有版本都一样与你,但mintty选项$任期xterm-256color内TMUX screen-256color。tmux的版本为1.9(您的版本为1.9a)。我已经在tmux中启动了vim vim -u NULL(-u NULL表示没有配置)。游标形状在任何模式下都是块状,但是当我按预期进行分配t_SI并将t_EI形状从块状(正常模式)切换到I(插入模式)时。你可以尝试启动VIM空.vimrc里,没有任何colorschemes和插件?
Alex Kroll

Answers:


11

看来问题在于tmux不会将更改光标的转义码发送到终端仿真器。您需要以特殊的顺序包装所需的转义码,以告知tmux应该将其传递给外部终端。

包装转义序列所需的序列是\<Esc>Ptmux;\<Esc> ... \<Esc>\\Source)。这...是您的转义序列。

因此,请尝试在您的计算机中执行以下操作.vimrc

if exists('$TMUX')
    let &t_SI = "\<Esc>Ptmux;\<Esc>\e[5 q\<Esc>\\"
    let &t_EI = "\<Esc>Ptmux;\<Esc>\e[2 q\<Esc>\\"
else
    let &t_SI = "\e[5 q"
    let &t_EI = "\e[2 q"
endif

我不使用您的终端模拟器或cygwin,因此无法测试此代码。但是该方法对我有用(我只是包装了适合我终端的其他转义代码)。


这甚至更好-无需改变我的作品.bashrc。谢谢。
科萨克2015年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.