在 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-256color
为screen-256color
可以解决问题,或者更确切地说,可以解决问题。为了以正确的方式解决这个问题,人们可能应该找到一种适当的组合终端选项。
答案1
某些终端(包括 xterm)可以配置为向应用程序发送控制序列当终端获得或失去焦点时:^[[I
当终端获得焦点时和^[[O
当终端停止焦点时。使用控制序列关闭此功能^[[?1004l
(CSI ? 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
脚本中完成:如果以交互方式完成,则为时已晚)。
注意符号:在这个答案中,我使用^[
转义字符(\033
在printf
、$'\e'
bash 或 zsh 中)。在 xterm 文档中,CSI 代表两个字符序列^[[
。