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


192

Коли я копіюю щось у буфер обміну і натискаю Ctrl+ Vу Bash, нічого не відбувається; Однак клацання правою кнопкою миші та вибір кнопки Вставити виконує завдання.

Чому? Чи є якась обґрунтована проблема (я впевнений, що стоїть) за такою поведінкою в Linux?


25
Shift- Insertтакож працює
bonyiii

33
Я віддаю перевагу Ctrl-Shift-V, особисто.
amalloy

3
Також ви можете використовувати Shift + Insert у більшості середовищ оболонки.
Фабіан

4
Що робити, якщо у вас не буде ключа Вставка?
Бен Рачикот

3
він також не працює в командному рядку Windows
phuclv

Відповіді:


360

У часи фізичних терміналів буфера обміну для всіх сеансів не існували, лише деякі програми підтримували внутрішню копію / вставлення - часто під назвою "буфери" або "вбиваючі кільця" - і використовували різні різні натискання клавіш. Наприклад, оболонка 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 CUACtrlIns для копіювання та ShiftInsвставки; ці ярлики підтримуються всіма версіями Windows.)

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

Коротше кажучи, до того часу, коли були написані Xterm та GNOME Terminal (я гадаю, ви використовуєте останнє), CtrlV вже багато років було зовсім інше значення, і його неможливо було змінити. Крім того, альтернативний метод копіювання тексту - "виділення" - вже був присутній у X11, тому явна дія копіювання / вставки, мабуть, вважалася не такою важливою, як це було б у Windows. Це означає, що потрібно було вибрати різні комбінації клавіш - наприклад, більшість сучасних термінальних програм, таких як термінал GNOME, використання CtrlShiftCта CtrlShiftV. (Якщо ви використовуєте Xterm, ті самі ярлики можна додавати вручну, використовуючи XTerm * vt100 * переклади Xresource. Rxvt не має такої опції.)

(Більшість інструментаріїв X11 також підтримують CUA "копіювати" та "вставляти" ключі, які не суперечать термінальним програмам. На жаль, реалізації досить непослідовні - CtrlInsкопії до "буфера обміну" в більшості програм (GTK, Qt4, але ігноруються Xaw); проте, вставляє ShiftInsз "первинного вибору" у більшості програм GTK та Qt4, але з "буфера обміну" у Firefox та з застарілих відрізаних буферів у застарілому Xaw.)


Все , що сказав, деякі термінали або консолі (зокрема, для Windows 10 консолі) зробити підтримують ці ключі. Оскільки консоль Windows завжди мала окремий режим "позначити / вибрати", CtrlCтепер вона також має два значення на основі контексту - у звичайному режимі вона надсилає переривання, у вибраному режимі копіюється у буфер обміну (як і Enterраніше).

Тим часом інструменти командного рядка Windows ніколи насправді ні до чого не використовували CtrlV , тож він повинен був "вставити", не заважаючи нічого. Однак це зробити на терміналах, подібних Unix, було б більш проблематично.


10
Хм. У Vim "yank" означає копіювати, а не вставляти. Це, мабуть, теж має більше сенсу. Ви впевнені в значенні цього терміна тут?
Конрад Рудольф

11
Так, я впевнений. Bash успадковує ярлики за замовчуванням від їхніх еквівалентів Emacs .
grawity

4
@grawity: ваш останній коментар - це трійковий твір, неправильно керований. Bash пропонує два режими редагування командного рядка, vim-режим та emacs-режим. Просто трапляється, що режим emacs є типовим для більшості встановлень. Це викликає неоднозначність у використанні терміна yank , навіть для bash.
rahmu

1
А-ха! Я знав, що розробники Vimperator припустилися помилки, коли вони перейшли <C-v>на iверсію 3, але я не міг покласти пальця на те, чому .
Ізката

2
@Colin: Ви все-таки пропустили відмінність між буфером обміну та вибором X. Існує кілька виборів (PRIMARY, SECONDARY, CLIPBOARD), але лише один з них зазвичай називається "буфер обміну" - вибір CLIPBOARD, тому що саме там Ctrl-C копіює, і саме там Ctrl-V вставляється. Основний вибір - це не буфер обміну.
grawity

47

Використовувати CtrlShiftVдля наклеювання.

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


4
То чому Linux не реєструє CTRL + SHIFT для спеціальних функцій; Я думаю, що copy-paste для деяких користувачів більш характерні, ніж спеціальні функції, правда?
Ясер Замані

22
Оболонки існували до того, як існували графічні термінали та графічні інтерфейси з функцією вирізання та вставки, тому ваш аргумент насправді не вірно. @YasserZamani
slhck

9
Ctrl + Shift + V виконується емулятором терміналу (припускаючи, що ви використовуєте термінал GNOME), а не bashсам по собі. Якщо ви коли-небудь знаходитесь поза середовищем GUI або використовуєте інший емулятор терміна, це, ймовірно, не вийде. Не думайте, що ця команда є портативною.
rahmu

@rahmu О, не мав про це уявлення. Використовуйте лише акції встановлення Ubuntu. Чи є універсальна команда?
Акаш

2
Напевно, немає доступу до буфера обміну (лише Shift + Ins для основного вибору). Навіть буфер обміну сам по собі є предметом X11, недоступний з Tty's. Однак Ctrl + Shift + V підтримується терміналом GNOME, терміналом Xfce4, KDE Konsole; це стосується найпопулярніших середовищ GUI.
grawity

20

Ось ваші налаштування пасти для копіювання загального призначення з популярними терміналами:

gnome-terminal (найпопулярніший в Linux)
Копія : CtrlShiftC
Вставлення : CtrlShiftV
Примітка : Вибір для копіювання та middle-clickвставки також працює, але він використовує альтернативний буфер обміну.

PuTTY (найпопулярніший термінал в Windows)
Копіювання : (виберіть з допомогою миші, без взаємодії з клавіатурою)
Paste : Right-click (або більш надійно: shiftRight-click)
Примітка : додатки , які приймають введення мишей (як vimі links) може вкрасти Right-click- shiftRight-clickзавжди буде працювати в будь-якому додатку.


Копія терміналу OSX : AppleC
Вставити : AppleV
Примітка. Програми, які приймають контроль миші (як vimі links), можуть змінити, що означає виділити текст, і в такому випадку копія не працюватиме так, як ви очікували. У цих випадках утримуйте, утримуючи кнопку Controlмиші, щоб вибрати. Взаємодія миші з додатками за умовчанням відключена у налаштуваннях вашого терміналу, тому більшість людей навіть не знають про це.


Чи не cmd.exeпопулярніший за PuTTY в Windows? :-)
Бен

@Ben Не як SSH-термінал.
tylerl

1
Ні, cmd.exeце не термінал SSH. Це дуже правда.
Бен

3
@Ben: Це зовсім не термінал - лише оболонка. Термінал за замовчуванням у Windows - це компонент csrss "Консоль Windows".
grawity

@Ben але правою кнопкою миші , щоб вставити також працює cmd.exe(і це єдиний шлях там, якщо ви не хочете , щоб відкрити меню> Правка> Вставити) в режимі швидкого редагування . У командному рядку pre-win10 немає ярлика
phuclv

17

Це глибока коренева традиція, що 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 та Firefox.

Ctrl- Vце конвенція Microsoft Windows, яка є імітацією Apple- Vвід Macintosh.


3
Це не зовсім віднімання - традиційно Ctrl очистив 6 та 7 біт символу; через це лист Ctrl + Shift + працює ідентично Ctrl + Letter у більшості терміналів (якщо тільки це явно не перекрито терміналом, як у випадку клавіш швидкого копіювання / вставки).
grawity

1
Оскільки ключі по суті впорядковані по відношенню до стандарту ASCII, програмний ПЗУ включає декілька таблиць огляду, які допомагають створювати коди ASCII. ... Утримування власної клавіші CONTROL при натисканні іншої клавіші викликає інший пошук таблиці. [Технічний посібник серії VT100, 4.4.9.3, цифровий].
Каз

1
@Linger дякую за редагування. Це добре відображається, але я не можу вводити всі ці <kbd>теги у майбутніх публікаціях.
Каз

Ctrl-Aє 1. Як я можу спробувати це? Мій термінал Gnome нічого не робить, коли я натискаю Ctrl-A.
Роберт

3

Для мене найпростішим способом копіювання пасти в оболонку є:

Виберіть потрібний код, а потім введіть його, натиснувши на mouse-middle-key


1
Поки у вас є середня клавіша миші.
jpierson

1
@jpierson не те, що я настійно рекомендую це, але ви можете написати невеликий сценарій, який просто використовується xdotool click 2для імітації натискання третьої кнопки для вас. Тоді в будь-якому середовищі менеджера вікон / робочого столу ви можете прив’язати цей скрипт до ключа - скажімо, mod i(для вставки) або до будь-яких клавішних зв’язків, які ви могли б мати (або все, що мод може означати - що насправді залежить, де ви це пов'язуєте)
dylnmc

2

Ми можемо використовувати кнопку вставки клавіатури для копіювання та вставки (у старих клавіатурах вона може бути відсутня)

Копія : CtrlInsert
Вставити :CtrlShiftInsert


1

ви також можете використовувати середню кнопку миші, якщо вам лінь і виберіть команду з текстового документа, сценарію чи Інтернету чи форуму. як тільки ви вибрали призначену команду, просто перейдіть до свого терміналу і натисніть середню кнопку миші. Я використовую цей метод, як я використовую щенячий Linux, який, здається, не підтримує нормальну поведінку клацання правою кнопкою миші та вставки. це робиться у вікні обробки файлів, тільки не у вікні терміналу. не знаю чому, але я спокійно задоволений, що дізнався про метод середньої кнопки, дуже зручно! ;-)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.