명령줄에서 vim 스크립트를 실행할 때 예기치 않은 `^[[I`

명령줄에서 vim 스크립트를 실행할 때 예기치 않은 `^[[I`

쉘 스크립트에서 이런 식으로 간단한 vim 스크립트를 얻으면

$ cat ascript 
:q

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

이것이 내가 실행했을 때 얻는 결과입니다.

$ bash test
^[[I

출력이 ^[[I예상치 못한 것이며 내 쉘 스크립트의 추가 논리가 중단되었습니다.

누구든지 그 특성과 이 효과를 제거할 수 있는 방법에 대해 추측/알고 있습니까?

업데이트 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^Gtmux 세션에서 작업하는 경우 문제가 존재하지 않는다는 것입니다. 이로 인해 vim의 (버기?) 터미널 설정 처리에 대해 생각하게 되었습니다. 실제로 TERM기본값 xterm-256color을 변경 하면 screen-256color문제가 해결됩니다. 이 문제를 올바른 방법으로 해결하려면 적절한 조합을 찾아야 할 것입니다.터미널 옵션.

답변1

일부 터미널(xterm 포함)은 응용 프로그램을 보내도록 구성할 수 있습니다.제어 순서터미널이 포커스를 얻거나 잃을 때: ^[[I터미널이 포커스를 얻을 때와 ^[[O터미널이 포커스를 잃을 때. 제어 시퀀스를 사용하여 이 기능을 끄거나 ^[[?1004l( CSI ? Ps lctlseqs 목록에서), 처음부터 이 기능을 켜지 않거나(기본적으로 꺼져 있음), 일부 응용 프로그램(Vim?)에서 이 기능을 구성하지 않도록 구성하십시오.

^[[2;2R팔레트를 보고하는 터미널입니다( CSI # Rctlseqs 문서에 설명되어 있음). 이는 터미널에서 실행 중인 응용 프로그램이 요청하는 경우에만 발생합니다(귀하의 경우에는 Vim일 수도 있습니다). ^[]11;rgb:3838/3b3b/4040^G에 대한 응답이다OSC 쿼리이는 다시 애플리케이션에 의해 시작됩니다.

Debian의 Vim은 -u NONE. (재현할 수는 없지만 지금은 xterm에 있지 않습니다.) 저는 Vim 전문가는 아니지만 실행해 볼 수 있을 것 같습니다.:set ttymouse=또는 :set t_RV=Vim에서 끄십시오(이 작업은 초기화 중에 수행되어야 하므로 스크립트 .vimrc-S스크립트에서 수행하십시오. 대화식으로 수행하면 너무 늦습니다).

표기법에 유의하세요. 이 답변에서는 ^[이스케이프 문자( \033in printf, $'\e'bash 또는 zsh )를 사용합니다. xterm 문서에서 CSI는 두 문자의 시퀀스를 나타냅니다 ^[[.

관련 정보