Почему Ctrl + V не вставляется в Bash (оболочка Linux)?
Когда я копирую что-то в буфер обмена и нажимаю Ctrl + V в Bash, ничего не происходит; Тем не менее, щелкнув правой кнопкой мыши и выбрав Вставить, сделает работу
Зачем? Есть ли какая-либо разумная проблема (я уверен, что есть) за этим поведением в Linux?
7 ответов
Во времена физических терминалов буфер обмена в течение сеанса не существовал, лишь немногие программы поддерживали внутреннее копирование / вставку - часто под названием "буферы" или "кольца уничтожения" - и использовали различные нажатия клавиш. Например, оболочка bash использует CtrlK или CtrlU, чтобы "убить" (вырезать), CtrlY - "убрать" (вставить); это происходит из редактора 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 уже много лет имел совершенно другое значение и не мог быть изменен. Кроме того, альтернативный метод копирования текста - "выделение" - уже присутствовал в X11, поэтому явное действие копирования / вставки, вероятно, считалось не таким важным, как в Windows. Это означает, что нужно было выбирать разные сочетания клавиш - например, большинство современных терминальных программ, таких как GNOME Terminal, используютCtrlShift C иCtrlShiftV. (Если вы используете Xterm, те же самые ярлыки можно добавить вручную, используяXresource XTerm * vt100 * translations. Rxvt не имеет такой опции.)
(Большинство наборов инструментов X11 также поддерживают клавиши "копировать" и "вставить" CUA, которые не конфликтуют с терминальными программами. К сожалению, реализации довольно противоречивы -Ctrl Ins копирует в "буфер обмена" в большинстве программ (GTK, Qt4, но игнорируется Xaw), однакоShift Ins вставляется из "первичного выбора" в большинстве программ GTK и Qt4, но из "буфера обмена" в Firefox и из устаревших теперь буферов вырезания в устаревшем Xaw.)
Все это говорит о том, что некоторые терминалы или консоли (в частности, консоль Windows 10) поддерживают эти ключи. Поскольку консоль Windows всегда имела отдельный режим "пометка / выбор", CtrlC теперь также имеет два значения в зависимости от контекста - в обычном режиме он отправляет прерывание, в режиме выбора он копирует в буфер обмена (так же, как это делал Enter).
Между тем, инструменты командной строки Windows никогда по-настоящему не использовали CtrlV для чего-либо, поэтому он должен был "вставлять", ничего не мешая. Однако сделать то же самое на Unix-подобных терминалах было бы более проблематично.
Используйте CtrlShiftV для вставки.
Ctrl с другими символами обычно используется оболочкой для специальных функций.
Вот ваши общие настройки копирования и вставки с популярными терминалами:
gnome-терминал (самый популярный в Linux)
Копировать: CtrlShiftC
Вставить: CtrlShiftV
Примечание: выбор для копирования и средний щелчок для вставки также работает, но он использует альтернативный буфер обмена.
PuTTY (самый популярный терминал в Windows)
Копировать: (выберите с помощью мыши, без взаимодействия с клавиатурой)
Вставить: щелкнуть правой кнопкой мыши (или более надежно: сместитьщелчок правой кнопкой мыши)
Примечание: приложения, которые принимают ввод с помощью мыши (например, vim
а также links
) может украсть щелчок правой кнопкой мыши - сдвигЩелчок правой кнопкой мыши всегда будет работать в любом приложении.
OSX Terminal
Копия: AppleC
Вставить: AppleV
Примечание. Приложения, управляющие мышью (например, vim
а также links
) может переопределить то, что означает выделение текста, и в этом случае копирование не будет работать так, как вы ожидаете. В этих случаях, удерживая нажатой клавишу Control, перетащите мышь, чтобы выбрать. Взаимодействие мыши с приложениями по умолчанию отключено в настройках вашего терминала, поэтому большинство людей даже не узнают об этом.
Это глубоко укоренившаяся традиция, когда клавиша 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.
Для меня самый простой способ скопировать вставить в оболочке:
Выберите нужный код, а затем вставьте его, нажав среднюю клавишу мыши
Мы можем использовать кнопку вставки клавиатуры для копирования и вставки (в старых клавиатурах она может отсутствовать)
Копировать: CtrlInsert
Вставить: CtrlShiftВставить
Вы также можете использовать среднюю кнопку мыши и, если вам лень, и выбрать команду из текстового документа, сценария, веб-страницы или форума. Как только вы выбрали нужную команду, просто перейдите к своему терминалу и нажмите среднюю кнопку мыши. Я использую этот метод, поскольку я использую Puppy Linux, который, кажется, не поддерживает нормальное поведение щелчка правой кнопкой мыши и вставки. это происходит в окне обработчика файлов, но не в окне терминала. не знаю почему, но я тихо доволен, я узнал о методе средней кнопки, очень удобно! ;-)