Я часто использую, ctrl+cчтобы скопировать текст из некоторого графического приложения, а затем вставить его в мой эмулятор терминала (терминатор), используя правую кнопку мыши и щелкнуть меню и вставить. Иногда я забываю, что буфер обмена содержит несколько строк, которые при вставке в bash заставляют каждую строку «исполняться»
Есть какое-то решение, чтобы полностью предотвратить многострочную вставку?
bash
command-line
x11
clipboard
terminal-emulator
Мартин Вегтер
источник
источник
sleep 999999
затем выполните вставку, если она выглядит нормально. команда sleep не читает строки и они сбрасываются при нажатииctrl+c
.bash
будет иметь поддержку вставки в скобках ,zsh
уже есть через сторонний плагин .printf '\e[?2004h'
в большинстве xterm-подобных эмуляторов терминала включен режим вставки в скобках, когда терминал заключает в скобки вставленный текст, чтобы приложения могли определить, где начинается вставка и где она заканчивается. xterm также поддерживает другой режим, в\e[?2005h
котором все вставляемые символы имеют префикс^V
(понимается многими приложениями и дисциплиной tty line какlitteral-next
).Ответы:
Этот ответ не является самым специфичным для вопроса пользователя. Пожалуйста, смотрите мой второй ответ. Я оставляю это здесь, потому что это решает более общую проблему.
За комментарии к исходному сообщению, вам нужно (1) эмулятор терминала , который поддерживает в квадратные скобки вставить и (2) , соответствующая поддержка независимо работает в терминале, то есть
vim
,bash
,zsh
. Эмуляторы терминала, поддерживающие вставку в скобках (список будет обновляться на основе комментариев к этому сообщению):xterm
- поскольку ??gnome-terminal
- поскольку ??putty
- с 0.63 (дата выпуска 2013-08-06)Приложения, поддерживающие режим в скобках:
vim
zsh
Для
bash
этого StéphaneChazelas собрал сценарий оболочки, чтобы облегчить обнаружение этого режима и предпринять соответствующие действия.Более конкретный ответ - предотвращение обрезания строк - без ответа, не зная о программе unix, которая запускается при нажатии клавиши paste.
Менеджер буфера обмена , может быть , что вам нужно.
источник
^V
какliteral-next
. Но как^V
попадает во входной поток приложения?bash
подсказка readline увидит это (и будет обрабатывать как literal-next)). Если в режиме icanon, линейная дисциплина этого внутреннего tty-устройства лишит его (до тех пор, покаlnext
символ^V
), так же, как когда вы нажимаете Ctrl-V X вручную.^V
если вы не используетеquoted paste
режим xterm (включается при отправке\e[?2005h
). Этотperl
сценарий можно адаптировать так, чтобы он удалял все, кроме первой строки в многострочном вставке (хотя не всегда надежно для больших вставок), но так, как он есть, поскольку он цитирует новую строку для readline (как если бы вы нажали Ctrl- V Ctrl-J), он предотвращает выполнение строк (они просто добавляются в буфер редактирования, и вам все равно нужно нажать Enter, чтобы выполнить их).