Я использую Ubuntu 14.04, и у меня странная проблема с экраном моего терминала, которая меня сильно беспокоит. Может ли кто-нибудь помочь мне с этим или объяснить, если я делаю что-то неправильно или не в стиле Linux? У меня есть какое-то решение, но я хочу понять, почему это происходит снова и снова.
Я часто копирую команды bash из своих заметок или из Интернета, а иногда получаю странные символы 0 ~ и 1 ~, которые обертывают скопированные объекты. Это очень раздражает, и это происходит совершенно случайно.
После долгих поисков я обнаружил, что эта штука называется режимом вставки с трещинами, поэтому теперь я использую эту команду, printf "\e[?2004l"
чтобы исправить свой терминал, если этот режим внезапно включился.
Можно ли как-то отключить эту функцию навсегда? Я сталкивался с этим на всех машинах Ubuntu, на которых я сейчас работаю. Ранее я использовал Ubuntu 10.10 и 12.04, и у меня никогда не было такой проблемы раньше.
источник
bind
разбора аргументов, которые он не распознает, это произойдет, если вы запустите эту команду, используя Readline до версии 7 или Bash до 4.4. Этот ответ не принесет пользы до следующего выпуска Ubuntu (17.04).printf
подход работает, но не работает , когда положил мне.bashrc
, и эта функция как - то автоматически включается снова периодически.bind
Подход разрушает мою клавиатуру (p
клавиша не работает, and putting that line in my
~ / .inputrc` работа, в течение 10 секунд, а затем начинает консоль ненадежно из-enaset-enaset-...
навсегда после 10 секунд использования. В конце концов я просто вручную повышен до Баша 4.4 из источника , чтобы исправить глупые проблема.bind 'set enable-bracketed-paste off'
(с пробелом вместо первого `-``. Редактирование только одного символа кажется невозможным.Вы можете поместить эту команду в свой
bashrc
. Тогда это будет применяться каждый раз, когда вы открываете свой терминал.Просто введите
vi ~/.bashrc
и добавьтеprintf "\e[?2004l"
в конце и сохраните файл с:wq
источник
echo 'printf "\e[?2004l"' >> ~/.bashrc
делает то же самое в одной строке, и вы можете проверить с помощьюtail -n1 ~/.bashrc
. Там нет необходимости использоватьvi
.Чтобы ответить на исходный вопрос о том, почему это происходит, вот возможный сценарий:
Проблема в том, что моя терминальная программа все еще думает, что вставка в скобках включена при передаче из оболочки A в оболочку B, поэтому она продолжает добавлять символы вокруг вставленного содержимого (биты 0 ~ и 1 ~). Оболочка B не поддерживает их, поэтому просто пропускает их без изменений. Вы должны указать терминалу отключить вставку в скобках, напечатав в своей оболочке специальную escape-последовательность, что и
printf "\e[?2004l"
делает.Есть несколько способов решить проблему:
Если вам вообще не нужна вставка в скобках, отключите ее в оболочке A, чтобы она никогда не включалась (ответ @ jwd)
Если вы хотите продолжать использовать вставку в скобках в оболочке A, но отключить в оболочке B, добавьте escape-последовательность к своему
.bashrc
(ответ @ MOHRE)Обновите оболочку B для поддержки вставки в скобках, чтобы она правильно интерпретировала символы 0 ~ и 1 ~.
Примечание: если вы используете экран GNU, вам нужно выполнить эту
printf
команду за пределами экрана. Кажется, он не работает внутри.источник