У меня нет Mac, пригодного для проверки этого ответа, но я сталкиваюсь с этой проблемой в XTerm под Linux очень редко, и (при условии, что iTerm2 учитывает те же управляющие коды), вы можете найти приведенное ниже исправление полезным.
Запустите следующую команду оболочки внутри терминала, где вы видите проблему:
printf "\e[?1004l"
(Обратите внимание, что последним символом является строчный 'ell'.)
Эта последовательность управления ANSI подобна той, что указана в ответе Томаса Дики, но она отключает (а не включает) функцию. Это должно решить вашу проблему во всех приложениях, а не только в Vim, путем предотвращения появления символов вообще.
В Linux я могу продемонстрировать эту последовательность управления, работая со следующими шагами:
- Запустите
xterm
и включите эту функцию, запустив printf "\e[?1004h"
в этом.
- Запустите
xeyes
или другое приложение с графическим интерфейсом из того же XTerm. (По какой-то причине этот эффект не произойдет для меня, пока рассматриваемый XTerm не запустит приложение. Кто-нибудь знает почему?)
- Повторно переключайте фокус в исходный XTerm и из него (например, щелкая по окнам) и смотрите
^[[O
и ^[[I
"набрал" текст в исходном XTerm.
- Теперь закройте Xeyes, вернитесь к исходному XTerm и запустите
printf "\e[?1004l"
(чтобы отключить функцию, как описано в исправлении выше).
- Повторите шаги « Run
xeyes
, Switch Focus », описанные выше, но на этот раз не увидите символов, вводимых в терминал.
Лично я вижу эту проблему только в том случае, если случайно выгрузил двоичный вывод в терминал, но если вы сталкиваетесь с ним более регулярно, вы можете добавить этот printf
в интерактивный скрипт запуска вашей оболочки (например, ~/.bashrc
). По-видимому, не существует никакого вреда (по крайней мере в XTerm) для отправки контрольного кода, если функция уже отключена, поэтому она должна быть безопасной, даже если вы иногда видите эту проблему только иногда.
Если вы обеспокоены тем, что ваша оболочка всегда генерирует этот вывод, возможно, из-за того, что вы иногда используете ее в местах, которые плохо обрабатывают эти управляющие коды, или если проблема иногда вызывается после запуска оболочки, тогда вы можете предпочесть установить псевдоним (например, с alias focusfix='printf "\e[?1004l"'
), чтобы было удобнее работать вручную.