从命令行运行 vim 脚本时出现意外的 `^[[I`

从命令行运行 vim 脚本时出现意外的 `^[[I`

在 shell 脚本中,如果我以这种方式获取一个简单的 vim 脚本

$ cat ascript 
:q

$ cat test
vim -S ascript -N -u NONE
read

这是我运行时得到的结果:

$ bash test
^[[I

输出^[[I是意外的,并且破坏了我的 shell 脚本的进一步逻辑。

有谁猜测/知道它的性质以及消除这种影响的可能方法?

更新1

zsh test输出是相同的,sh由于其他原因不起作用。

$ zsh test
^[[I

$ sh test
test: 2: read: arg count

只是为了完整性:

"Debian GNU/Linux 11 (bullseye)"
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Oct 01 2021 01:51:08)

更新2

尝试在其他系统上重现后:

更短的方法是

vim -c ': quit' ; read

这可能会也可能不会为您提供一些垃圾输出,^[[I这只是其中一个示例,另一种可能是^[[2;2R^[]11;rgb:3838/3b3b/4040^G.所以我发现的另一个事实是,如果在 tmux 会话中工作,问题就不存在。这让我想到了 vim(错误?)处理终端设置的问题。事实上,TERM从默认更改xterm-256colorscreen-256color可以解决问题,或者更确切地说,可以解决问题。为了以正确的方式解决这个问题,人们可能应该找到一种适当的组合终端选项

答案1

某些终端(包括 xterm)可以配置为向应用程序发送控制序列当终端获得或失去焦点时:^[[I当终端获得焦点时和^[[O当终端停止焦点时。使用控制序列关闭此功能^[[?1004lCSI ? Ps l在 ctlseqs 列表中),或者首先不要打开它(默认情况下关闭),或者配置某些应用程序(Vim?)不这样做。

^[[2;2R是报告其调色板的终端(记录CSI # R在 ctlseqs 文档中)。仅当终端中运行的应用程序请求它时才会发生这种情况(在您的情况下同样可能是 Vim)。^[]11;rgb:3838/3b3b/4040^G是对一个的回应OSC查询这又是由应用程序启动的。

Debian 下的 Vim 似乎配置为默认打开鼠标支持,即使使用-u NONE.我认为这就是你的问题的原因。 (我无法重现它,但我现在不在 xterm 中。)我不是 Vim 专家,但我认为你可以运行:set ttymouse=或者:set t_RV=在 Vim 中将其关闭(这需要在初始化期间完成,因此在脚本中.vimrc-S脚本中完成:如果以交互方式完成,则为时已晚)。

注意符号:在这个答案中,我使用^[转义字符(\033printf$'\e'bash 或 zsh 中)。在 xterm 文档中,CSI 代表两个字符序列^[[

相关内容