2012-05-07 07:44:30 +0000 2012-05-07 07:44:30 +0000
196
196

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

Когда Я копирую что-то в буфер обмена и нажимаю Ctrl + V в Bash, ничего не происходит;Тем не менее, правый клик и выбор Paste делает эту работу.

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

Ответы (7)

364
364
364
2012-05-07 08:03:14 +0000

Во времена физических терминалов , сессионных буферов обмена не существовало, лишь несколько программ поддерживали внутреннее копирование/вставку - часто под именами “буферов” или “убийственных колец” - и использовали различные нажатия клавиш. Например, оболочка bash использует CtrlK или CtrlU для “kill” (cut), CtrlY для “yank” (paste); это происходит из редактор emacs .

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

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

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

Короче говоря, к тому времени, когда были написаны Xterm и GNOME Terminal (я полагаю, вы используете последний), CtrlV already имел совершенно другое значение в течение многих лет и не мог быть изменен. Кроме того, альтернативный метод копирования текста - “выделение” - уже присутствовал в X11, так что явное действие копирования/вставки, вероятно, считалось не столь важным, как это было бы в Windows. Это означает, что необходимо было выбирать различные сочетания клавиш - например, большинство современных терминальных программ, таких как GNOME Terminal, используют CtrlShiftC и CtrlShiftV. (Если вы используете Xterm, то те же самые сочетания клавиш можно добавить вручную с помощью X-ресурса XTerm*vt100*translations Xresource. В Rxvt такой возможности нет.)

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

  • *

Все это говорит о том, что некоторые терминалы или консоли (в частности, консоль Windows 10) do поддерживают эти клавиши. Так как консоль Windows всегда имела отдельный режим “отметить/выбрать”, CtrlC теперь также имеет два значения, основанные на контексте - в обычном режиме он посылает прерывание, в режиме select он копирует в буфер обмена (так же, как это делал Enter).

Между тем, инструменты командной строки Windows никогда на самом деле не used CtrlV ни для чего, так что он был привязан к “вставить”, не беспокоя ничего особенного. Однако делать то же самое на Unix-подобных терминалах было бы более проблематично.

48
48
48
2012-05-07 07:45:55 +0000

Для вставки используйте CtrlShiftV.

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

21
21
21
2012-05-07 21:22:43 +0000

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

gnome-терминал (самый популярный в Linux) Copy : CtrlShiftC Вставить : CtrlShiftV Note : Выборочное копирование и среднее нажатие для вставки также работает, но использует альтернативный буфер обмена.

PuTTY (самый популярный терминал в Windows) Copy : (выберите с помощью мыши, без взаимодействия с клавиатурой) Вставить : Щелкните правой кнопкой мыши (или более надежно: shiftRight-click) Note : Приложения, которые принимают ввод мыши (например, vim и links) может украсть правой кнопкой мыши - shiftRight-click всегда будет работать в любом приложении. и002 OSX Terminal и002 Copy : AppleC Paste : AppleV Note: Приложения, которые берут управление мышью (например, vim и links), могут переопределить то, что означает выделение текста, и в этом случае копия будет работать не так, как вы ожидаете. В этих случаях удерживайте клавишу Control во время перетаскивания мыши для выделения. Взаимодействие мыши с приложениями отключено по умолчанию в настройках терминала, поэтому большинство людей даже не будут знать об этом.

17
17
17
2012-05-07 14:34:50 +0000

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

Для Ctrl-Shift аналогичной традиции нет. Ctrl-Shift-V не должен производить никаких специфических символов.

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

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

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

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

3
3
3
2015-08-03 12:57:48 +0000

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

Выберите код, который вы хотите, а затем пропустите его, нажав на кнопку мыши-срединной кнопки

2
2
2
2015-05-08 13:42:05 +0000

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

Copy : CtrlInsert Вставить : CtrlShiftInsert

1
1
1
2015-05-19 16:08:05 +0000

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

Похожие вопросы

6
10
11
5
3