Вопрос: Почему Ctrl + V не вставляется в Bash (оболочка Linux)?


Когда я копирую что-то в буфер обмена и нажимаю Ctrl + В в Баше ничего не происходит; Однако, щелчок правой кнопкой мыши и выбор Вставить делает работу.

Зачем? Есть ли разумная проблема (я уверен, что есть) за этим поведением в Linux?


169
2018-05-07 07:44


Источник


Shift-Insert также работает - bonyiii
я предпочитаю Ctrl-Shift-V, лично. - amalloy
Вы также можете использовать Shift + Insert в большинстве оболочек. - Fabian
Что делать, если у вас не будет ключа Insert? - Ben Racicot
он также не работает в командной строке Windows ' - phuclv


Ответы:


В дни физического терминалы, сеансовые буфера обмена не существовали, только несколько программ поддерживали внутреннюю копию / вставку - часто под названием «буферы» или «убить кольца» - и использовали различные различные нажатия клавиш. Например, удар использование оболочки CtrlК или CtrlU «убить» (разрезать), CtrlY «выдернуть» (вставить); это происходит из Emacs редактор,

CtrlС почти везде в Unix клавиша «прерывание», используемый для отмены текущей программы или операции. CtrlВ ключевой часто означает «verbatim insert», то есть вставлять следующий символ буквально без каких-либо связанных действий. Например, нормальный Esc переключается в режим команд в VI редактора, но CtrlВ, Esc будет вставлять ESC в документ.

Использование CtrlС для копирования и CtrlВ для вставки из сеансового буфера обмена была введена Mac OS в 1983 году и Microsoft Windows 3.x в 1990 году. (Более ранние версии Windows (1.x и 2.x), а также IBM OS / 2 поддерживали только IBM CUA ключи CtrlIns для копирования и сдвигIns вставить; эти ярлыки поддерживаются всеми версиями Windows.)

Когда GUI с поддержкой буфера обмена, наконец, достигли Unix, Ctrl нажатия клавиш уже использовались многими терминальными программами. Кроме того, графический интерфейс X имел несколько разные механизмы: «выборы» и «срезанные буферы». Даже сейчас вы можете выбрать текст в одной программе и вставить его с помощью средней кнопки мыши без какого-либо явного действия копирования.

Короче говоря, к тому времени, когда были написаны Xterm и GNOME Terminal (я предполагаю, что вы используете последний), CtrlВ  уже совершенно другое значение в течение многих лет и не может быть изменено. Кроме того, альтернативный метод копирования текста - «выбор» - уже присутствовал в X11, поэтому явное действие copy / paste, вероятно, считалось не таким важным, как в Windows. Это означает, что нужно выбрать различные сочетания клавиш - например, большинство современных терминальных программ, таких как терминал GNOME, используют CtrlсдвигС а также CtrlсдвигВ, (Если вы используете Xterm, те же ярлыки можно добавить вручную, используя XTerm * VT100 * переводы Xresource. У Rxvt такой опции нет.)

(Большинство наборов инструментов X11 также поддерживают ключи «копировать» и «вставлять» CUA, которые не конфликтуют с терминальными программами. К сожалению, реализации довольно противоречивы - CtrlIns копирует в «буфер обмена» в большинстве программ (GTK, Qt4, но игнорируется Xaw); Однако, сдвигInsпасты из «основного выбора» в большинстве программ GTK и Qt4, но из «буфера обмена» в Firefox и из теперь устаревших срезанных буферов в теперь устаревшем Xaw.)


Все сказанное, некоторые терминалы или консоли (в частности, консоль Windows 10) делать поддерживайте эти ключи. Поскольку на консоли Windows всегда был отдельный режим «отметка / выбор», CtrlС теперь также имеет два значения на основе контекста - в обычном режиме он отправляет прерывание, в режиме выбора он копирует в буфер обмена (так же, как Войти использовал к).

Между тем, средства командной строки Windows никогда не используемый  CtrlВ для чего угодно, поэтому он должен был «вставить», ничего не нарушая. Однако делать то же самое на Unix-подобных терминалах было бы более проблематичным.


331
2018-05-07 08:03



Хм. В Vim «yank» означает копирование, а не вставку. Это, похоже, имеет больше смысла. Вы уверены в значении этого термина здесь? - Konrad Rudolph
Да, я уверен. Bash наследует ярлыки по умолчанию из их эквиваленты Emacs, - grawity
@grawity: ваш последний комментарий - это крошечный бит. Bash предлагает два режима редактирования командной строки: vim-mode и emacs-mode. Случается, что режим emacs по умолчанию используется для большинства установок. Это вызывает двусмысленность в использовании термина дергать, даже для bash. - rahmu
Ага! я знал разработчики Vimperator совершили ошибку, когда они переключились <C-v> в i в версии 3, но я не мог Зачем, - Izkata
@Colin: Вы все еще пропустили различие между буфером обмена и выбором X. Существует несколько вариантов (PRIMARY, SECONDARY, CLIPBOARD), но только один из них обычно называется «клипбордом» - выбор CLIPBOARD, потому что это то, где копирует Ctrl-C, и это то, где вставляется Ctrl-V. Основной выбор - это не буфер обмена. - grawity


использование CtrlсдвигВ для вставки.

Ctrl с другими символами обычно используется оболочкой для специальных функций.


41
2018-05-07 07:45



Итак, почему Linux не регистрирует CTRL + SHIFT для специальных функций; Я думаю, что copy-paste более типично для некоторых пользователей, чем для специальных функций, верно? - Yasser Zamani
Оболочки существовали до того, как появились графические терминалы и графические интерфейсы с функцией вырезания и вставки, поэтому ваш аргумент недействителен. @YasserZamani - slhck
Ctrl + Shift + V выполняется эмулятором терминала (при условии, что вы используете терминал GNOME), а не bashсам. Если вы когда-либо находились вне среды графического интерфейса, или если вы используете другой эмулятор термина, это, вероятно, не сработает. Не думайте, что эта команда переносима. - rahmu
@rahmu О, понятия не имею об этом. Используйте только установки Ubuntu. Есть ли универсальная команда? - Akash
Вероятно, для доступа к буферу (например, Shift + Ins для первичного выбора) нет доступа. Даже сам буфер обмена - вещь X11, недоступная из tty. Однако Ctrl + Shift + V поддерживается терминалом GNOME, терминалом Xfce4, KDE Konsole; это охватывает самые популярные среды графического интерфейса. - grawity


Вот ваши настройки скопирования общего назначения с популярными терминалами:

gnome-terminal (самый популярный в Linux)
копия: CtrlсдвигС
Вставить: CtrlсдвигВ
Заметка: Выбор для копирования и Щелчок средней кнопкой мыши для вставки также работает, но он использует альтернативный буфер обмена.

PuTTY (самый популярный терминал в Windows)
копия: (выберите с помощью мыши, без взаимодействия с клавиатурой)
Вставить: Щелкните правой кнопкой мыши  (или более надежно: сдвигЩелкните правой кнопкой мыши)
Заметка: Приложения, которые вводят ввод мыши (например, vim а также links) может украсть Щелкните правой кнопкой мыши - сдвигЩелкните правой кнопкой мыши всегда будет работать в любом приложении.

Терминал OSX
копия: яблокоС
Вставить: яблокоВ
Заметка: Приложения, которые управляют мышью (например, vim а также links) может переопределить то, что означает выбор текста, и в этом случае копия не будет работать так, как вы ожидаете. В этих случаях удерживайте контроль пока вы перетаскиваете мышь, чтобы выбрать. Интерфейс мыши с приложениями по умолчанию отключен в настройках вашего терминала, поэтому большинство людей даже не знают об этом.


17
2018-05-07 21:22



не cmd.exe более популярны, чем PuTTY в Windows? :-) - Ben
@Ben Не как терминал SSH. - tylerl
Нет, cmd.exe не является SSH-терминалом. Это очень верно. - Ben
@Ben: Это не терминал вообще - только оболочка. Терминал по умолчанию в Windows - это компонент Windows Console для csrss. - grawity
@Ben, но правый клик для вставки также работает cmd.exe (и это единственный способ, если вы не хотите открывать меню> edit> paste) в быстрый режим редактирования, В командной строке pre-win10 нет ярлыка - phuclv


Это глубокая традиция, согласно которой Ctrl ключ вместе с буквой генерирует управляющие символы ASCII, найденные путем вычитания 64 из значения ASCII в верхнем регистре. Эти расчетные карты Ctrl- до 1 и т. д. Например Ctrl-я является табуляция а также Ctrl-J это перевод строки.

Подобных традиций для Ctrl-сдвиг, Ctrl-сдвиг-В как ожидается, не произведет какого-либо конкретного характера.

Терминальные эмуляторы должны поддерживать традицию, прозрачно проходя через Ctrl соглашение, позволяя ему отображаться как символьный ввод для программ, которые управляются через это окно терминала. Программы на основе терминала управляют ключами команд. Например, Bash использует Ctrl-В как команда, которая означает «взять следующего символа буквально». Это позволяет вставить управляющий символ в командной строке. Если терминал крадет управляющие клавиши для собственного использования, такие команды становятся недоступными. Так перехватывать Ctrl-В для мета-функции не может быть и речи (по крайней мере, в конфигурации по умолчанию).

Однако терминальные эмуляторы могут свободно перехватывать Ctrl-сдвиг-Вкоторый не должен генерировать символ. Ctrl-сдвиг-В не является стандартом; это вещь терминала Gnome (которая может быть в некоторых других терминалах).

На настольных компьютерах Unix на базе X соглашение заключается в том, что для копирования не требуется команда. Вы просто выбираете текст. И средняя кнопка вставляет этот текст в другое место. Вы обнаружите, что он работает в Xterm, Gnome Terminal и Firefox.

Ctrl-В это соглашение Microsoft Windows, которое является имитацией яблоко-В от Macintosh.


15
2018-05-07 14:34



Это не в точку вычитание - традиционно Ctrl имеет очистил 6-й и 7-й бит характера; из-за этого, Ctrl + Shift + письмо работает одинаково с Ctrl + Letter на большинстве терминалов (если только он явно не переопределяется терминалом, как в случае быстрых клавиш копирования / вставки). - grawity
Поскольку ключи по существу произвольно упорядочены относительно стандарта ASCII, программный ПЗУ включает в себя несколько справочных таблиц, которые помогают генерировать коды ASCII. ... Удержание собственной клавиши CONTROL при нажатии другой клавиши вызывает другой поиск в таблице. [Техническое руководство серии VT100, 4.4.9.3, Digital]. - Kaz
@Linger благодарит за редактирование. Это красиво выглядит, но я никак не набираю все эти <kbd> теги в будущих сообщениях. - Kaz
Ctrl-A является 1, Как я могу попробовать это? Мой терминал Gnome ничего не делает, когда я нажимаю Ctrl-A, - robert


Мы можем использовать кнопку вставки клавиатуры для копирования и вставки (на старых клавиатурах это может отсутствовать)

копия: CtrlВставить
Вставить: CtrlсдвигВставить 


2
2018-05-08 13:42





Для меня самый простой способ скопировать пачку в оболочку:

Выберите нужный код, а затем прокрутите его, нажав мышь среднего ключа


2
2017-08-03 12:57



Пока у вас средний ключ мыши. - jpierson
@jpierson не то, что я настоятельно рекомендую это, но вы можете написать небольшой скрипт, который просто использует xdotool click 2 чтобы эмулировать нажатие третьей кнопки для вас. Затем, в любом оконном менеджере / рабочем окружении, в котором вы находитесь, вы можете привязать этот скрипт к ключу - скажем, mod  i (для вставки) или любые другие сочетания клавиш, которые могут быть доступны (или какой бы модный кодекс мог означать - что действительно зависит от того, где вы связываете это) - dylnmc


вы также можете использовать среднюю кнопку мыши, если вы чувствуете себя ленивым и выбираете команду из текстового документа, сценария или веб-сайта или форума. как только вы выбрали намеченную команду, просто перейдите к своему терминалу и нажмите среднюю кнопку мыши. Я использую этот метод, поскольку я использую щенок linux, который, похоже, не поддерживает нормальное поведение правого клика и вставки. он работает в окне обработчика файлов, просто не в терминальном окне. не знаю почему, но я очень рад, что узнал о методе средней кнопки, очень удобно! ;-)


1
2018-05-19 16:08