Почему режим скопированной пасты разрешен спорадически на экране терминала?

18

Я использую Ubuntu 14.04, и у меня есть странная проблема с моим экраном терминала, который меня очень сильно раздражает. Может ли кто-нибудь помочь мне с этим или объяснить мне, если я делаю что-то неправильно или не linux-way? У меня есть какое-то решение, но я хочу понять, почему это происходит снова и снова.

Я часто копирую команды bash из своих заметок или из Интернета, и иногда я получаю странные 0 ~ и 1 ~ символы, которые обертывают вещи, которые я копировал. Это очень раздражает, и это происходит совершенно случайно.

После долгого поиска я узнал, что эта вещь называется режим скошенной пасты , поэтому теперь я использую эту команду printf "\e[?2004l" , чтобы исправить мой терминал, если этот режим внезапно включен.

Можно ли как-то отключить эту функцию? Я столкнулся с этим на всех машинах Ubuntu, над которыми я работаю сейчас. Раньше я использовал Ubuntu 10.10 и 12.04, и раньше у меня не было такой проблемы.

    
задан artemdevel 16.08.2015 в 20:26
источник

3 ответа

6

Вы можете отключить режим вставки в скобки.

Чтобы попробовать это временно, в bash:

bind 'set-enable-bracketed-paste off'

Затем, если вам нравится, как это работает, вы можете поместить параметр в свой ~/.inputrc или общесистемный в /etc/inputrc (или где бы он ни находился на Ubuntu).

    
ответ дан jwd 24.02.2016 в 19:47
4

Вы можете поместить эту команду в свой bashrc . Затем он будет применяться каждый раз, когда вы откроете терминал.

Просто наберите vi ~/.bashrc и добавьте printf "\e[?2004l" в конце и сохраните файл с :wq

    
ответ дан MOHRE 06.05.2017 в 06:31
1

Чтобы ответить на ваш исходный вопрос why , это возможный сценарий:

  • У моего домашнего компьютера была новая версия zsh, которая поддерживала скопированную пасту (назовем ее оболочкой A)
  • Я пробрался в компьютер с моей оболочкой, установленной в более старую версию bash, которая не поддерживает скобку в скобках (оболочка B)

Проблема в том, что моя терминальная программа по-прежнему считает, что вставка скобок включена, когда sshing из оболочки A в оболочку B, поэтому она продолжает добавлять символы вокруг вашего вставленного содержимого (0 ~ и 1 ~ бит). Shell B не поддерживает их, поэтому он просто передает их без изменений. Вы должны сказать своему терминалу, чтобы он отключил скобку, скопировав вашу оболочку с помощью специальной escape-последовательности - это то, что делает printf "\e[?2004l" .

Есть несколько способов решить проблему:

  1. Если вы вообще не заботитесь о скобках в скобках, отключите его на оболочке A, чтобы он никогда не включался (@ jwd).

  2. Если вы хотите использовать скобку в скобках в оболочке A, но отключите ее в оболочке B, добавьте escape-последовательность в свой .bashrc (ответ @ MOHRE)

  3. Обновите оболочку B, чтобы поддерживать скобку в скобках, поэтому она правильно интерпретирует эти 0 ~ и 1 ~ символы.

Примечание: если вы используете экран GNU, вам нужно запустить эту команду printf за пределами экрана. Кажется, что это не работает внутри.

    
ответ дан rjh 02.01.2018 в 16:23