Чому режим скореного вставки ввімкнено епізодично на екрані мого терміналу?


23

Я використовую Ubuntu 14.04, і у мене є дивна проблема з моїм екраном терміналів, який мене дуже клопоче. Може хтось допоможе мені в цьому чи пояснить мені, якщо я роблю щось не так чи не в Linux? У мене є якесь рішення, але я хочу зрозуміти, чому це відбувається знову і знову.

Я часто копіюю bash команди зі своїх заміток чи з Інтернету, а іноді отримую дивні символи 0 ~ та 1 ~, які обгортають речі, які я скопіював. Це дуже дратує, і це відбувається абсолютно випадково.

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

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

Відповіді:


11

Ви можете вимкнути режим вставки, що містить корзини.

Щоб спробувати це тимчасово, в bash:

bind 'set enable-bracketed-paste off'

Потім, якщо вам подобається, як це поводиться, ви можете розмістити налаштування у своєму ~/.inputrcабо загальносистемному /etc/inputrc(або де б це не було на Ubuntu).


4
Здається, це все для мене - це зробити так, що я не можу вводити букву "p" (і лише малу букву "p"), або вставляти її, як і зовсім, і нічого іншого,
каже Брайан Відновити Моніку

@BrianLeishman Через особливий спосіб 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 з джерела , щоб виправити дурні проблема.
Хмара

1
Правильна команда bind 'set enable-bracketed-paste off'(з пробілом замість першого `-``. Редагування лише одного символу видається неможливим.
Стрілка

7

Ви можете помістити цю команду у свою bashrc. Тоді це застосовуватиметься кожного разу, коли ви відкриваєте свій термінал.

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


Так, я це робив спочатку насправді :) пізніше я просто відключив цей режим, як запропонував @jwd.
artemdevel

1
echo 'printf "\e[?2004l"' >> ~/.bashrcробить те саме в одному рядку, і ви можете це підтвердити tail -n1 ~/.bashrc. Не потрібно користуватися vi.
pzkpfw

6

Щоб відповісти на своє первісне запитання, чому це відбувається, ось такий можливий сценарій:

  • У моєму домашньому комп’ютері була нова версія zsh, яка підтримувала скобостебну пасту (назвемо це оболонкою A)
  • Я перекинувся на комп’ютер зі своєю оболонкою, встановленою на старішу версію bash, яка не підтримує скобоподібну пасту (оболонку B)

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

Є кілька способів вирішити проблему:

  1. Якщо ви взагалі не переймаєтесь скоромною пастою, вимкніть її на оболонці A, щоб вона ніколи не була ввімкнена (відповідь @ jwd)

  2. Якщо ви хочете продовжувати використовувати скобкову пасту на оболонці A, але вимкнути її на оболонці B, додайте послідовність евакуації до вашої .bashrc(@ відповідь MOHRE)

  3. Оновіть оболонку B, щоб підтримувати скобоване вставлення, щоб вона правильно інтерпретувала ці 0 ~ та 1 ~ символи.

Бічна примітка: якщо ви використовуєте екран GNU, вам потрібно запустити цю printfкоманду поза екраном. Це не здається, що працює всередині.


Дякую @rjh :) Але я ніколи не використовував zsh або не мав проблеми з ssh, як ви описали. Схоже, щось було просто неправильно налаштовано на Ubuntu років тому.
artemdevel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.