У меня нет 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"
(чтобы отключить эту функцию, как описано в исправлении выше).
- Повторите шаги « беги
xeyes
, переключи фокус » выше, но на этот раз не увидишь символов, вводимых в терминал.
Я лично вижу эту проблему только в том случае, если случайно выгрузил двоичный вывод в терминал, но если вы сталкиваетесь с ним более регулярно, вы можете добавить printf
его в интерактивный сценарий запуска вашей оболочки (например ~/.bashrc
). Похоже, что отправка контрольного кода, если функция уже отключена, не причиняет вреда (по крайней мере, в XTerm), поэтому она должна быть безопасной, даже если вы иногда видите эту проблему только иногда.
Если вы беспокоитесь о том, что ваша оболочка всегда генерирует этот вывод, возможно, из-за того, что вы иногда используете ее в местах, которые плохо обрабатывают эти управляющие коды, или если проблема иногда возникает после запуска оболочки, тогда вы можете установить создать псевдоним (например, с помощью alias focusfix='printf "\e[?1004l"'
), чтобы сделать его более удобным для запуска вручную.