178

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

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

7 ответов7

344

Во времена физических терминалов буфер обмена в течение сеанса не существовал, лишь немногие программы поддерживали внутреннее копирование / вставку - часто под названием "буферы" или "кольца уничтожения" - и использовали различные нажатия клавиш. Например, оболочка bash использует Ctrl K или Ctrl U, чтобы "убить" (вырезать), Ctrl Y - "убрать" (вставить); это происходит из редактора Emacs.

Ctrl C почти везде в Unix была клавишей "прерывание", используемой для отмены текущей программы или операции. Клавиша Ctrl V часто означала "дословную вставку", то есть буквально вставляла следующий символ без выполнения каких-либо связанных действий. Например, обычный Esc переключается в командный режим в редакторе vi , но Ctrl V , Esc вставит символ ESC в документ.

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

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

Короче говоря, к тому времени, когда были написаны Xterm и GNOME Terminal (я полагаю, вы используете последний), Ctrl V уже много лет имел совершенно другое значение и не мог быть изменен. Кроме того, альтернативный метод копирования текста - "выделение" - уже присутствовал в X11, поэтому явное действие копирования / вставки, вероятно, считалось не таким важным, как в Windows. Это означает, что нужно было выбирать разные сочетания клавиш - например, большинство современных терминальных программ, таких как GNOME Terminal, используют Ctrl Shift C и Ctrl Shift V. (Если вы используете Xterm, те же самые ярлыки можно добавить вручную, используя Xresource XTerm * vt100 * translations . Rxvt не имеет такой опции.)

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


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

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

43

Используйте Ctrl Shift V для вставки.

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

17

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

gnome-терминал (самый популярный в Linux)
Копировать: Ctrl Shift C
Вставить: Ctrl Shift V
Примечание: выбор для копирования и средний щелчок для вставки также работает, но он использует альтернативный буфер обмена.

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

OSX Terminal
Копия: Apple C
Вставить: Apple V
Примечание. Приложения, которые управляют мышью (например, vim и links), могут переопределять то, что означает выделение текста, в этом случае копирование не будет работать так, как вы ожидаете. В этих случаях, удерживая нажатой клавишу Control , перетащите мышь для выбора. Взаимодействие мыши с приложениями по умолчанию отключено в настройках терминала, поэтому большинство людей даже не узнают об этом.

16

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

Нет аналогичной традиции для Ctrl - Shift. Ожидается, что Ctrl - Shift - V не выдаст какого-либо конкретного символа.

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

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

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

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

2

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

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

2

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

Копировать: Ctrl Insert
Вставить: Ctrl Shift Вставить

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .