Dlaczego Ctrl + V nie wkleja się w Bash (powłoka Linux)?

192

Kiedy kopiuję coś do schowka i naciskam Ctrl+ Vw Bash, nic się nie dzieje; Jednak kliknięcie prawym przyciskiem myszy i wybranie Wklej wykonuje pracę.

Dlaczego? Czy jest jakiś rozsądny problem (jestem pewien, że istnieje) za tym zachowaniem w Linuksie?

Yasser Zamani
źródło
25
Shift- Insertrównież działa
bonyiii
33
Wolę Ctrl-Shift-Vosobiście.
amalloy
3
Możesz także użyć Shift + Insert w większości środowisk powłoki.
Fabian
4
Co jeśli nie będziesz miał klucza Wstaw?
Ben Racicot
3
nie działa również w wierszu poleceń systemu Windows
phuclv

Odpowiedzi:

360

W czasach fizycznych terminali nie istniały schowki obejmujące całą sesję, tylko kilka programów obsługiwało wewnętrzne kopiowanie / wklejanie - często pod nazwą „buforów” lub „zabójczych pierścieni” - i używało różnych różnych naciśnięć klawiszy. Na przykład, powłoka bash używa CtrlKlub CtrlU„zabija” (wycina), CtrlY„szarpa” (wkleja); ten pochodzi z tej emacs edytora .

CtrlCprawie wszędzie w Uniksie był klawisz „przerwania” , używany do anulowania bieżącego programu lub operacji. CtrlVKlucz często oznaczało „verbatim insert” - czyli wstawić następujące charakter dosłownie bez wykonywania żadnych powiązanych działań. Na przykład normalnym Escprzełącza się w tryb w poleceniu vi edytora, ale CtrlV, Escbędzie wstawić ESCznak do dokumentu.

Korzystanie z funkcji CtrlCkopiowania i CtrlVwklejania ze schowka dla całej sesji zostało wprowadzone przez Mac OS w 1983 roku i Microsoft Windows 3.x w 1990 roku. (Wcześniejsze wersje Windows (1.x i 2.x), a także IBM OS / 2 , obsługiwane tylko klucze IBM CUACtrlIns do kopiowania i ShiftInswklejania; skróty te są obsługiwane przez wszystkie wersje systemu Windows).

Kiedy GUI z obsługą schowka w końcu dotarły do ​​Uniksa, Ctrlnaciśnięcia klawiszy były już używane przez wiele programów terminalowych. Ponadto interfejs graficzny X miał nieco inne mechanizmy : „selekcje” i „bufory cięcia”. Nawet teraz możesz zaznaczyć tekst w jednym programie i wstawić go za pomocą środkowego przycisku myszy, bez żadnej wyraźnej operacji kopiowania.

Krótko mówiąc, do czasu napisania Xterm i GNOME Terminal (domyślam się, że używasz tego drugiego), CtrlV już od wielu lat miało ono zupełnie inne znaczenie i nie mogło być zmienione. Ponadto alternatywna metoda kopiowania tekstu - „zaznaczenie” - była już obecna w X11, więc jawne działanie kopiuj / wklej prawdopodobnie nie było tak ważne, jak byłoby w systemie Windows. Oznacza to, że musiały zostać wybrane różne skróty klawiaturowe - na przykład większość nowoczesnych programów terminalowych, takich jak GNOME Terminal, użyj CtrlShiftCi CtrlShiftV. (Jeśli używasz Xterm, te same skróty można dodać ręcznie, korzystając z Xresource XTerm * vt100 * . Rxvt nie ma takiej opcji).

(Większość zestawów narzędzi X11 obsługuje także klawisze CUA „kopiuj” i „wklej”, które nie powodują konfliktu z programami terminalowymi. Niestety implementacje są raczej niespójne - CtrlInskopiowanie do „schowka” w większości programów (GTK, Qt4, ale ignorowane przez Xaw); jednak ShiftInswkleja się z „podstawowej selekcji” w większości programów GTK i Qt4, ale z „schowka” w Firefoksie i z przestarzałych buforów cięcia w przestarzałym Xaw.)


Wszystko, co powiedział, niektóre terminale lub konsole (w szczególności konsoli systemu Windows 10) zrobić wspierać te klucze. Ponieważ konsola Windows zawsze miała osobny tryb „zaznacz / wybierz”, CtrlCteraz ma również dwa znaczenia oparte na kontekście - w trybie zwykłym wysyła przerwanie, w trybie wyboru kopiuje do schowka (tak jak Enterkiedyś).

Tymczasem narzędzia wiersza polecenia systemu Windows nigdy tak naprawdę nie były używane CtrlV do niczego, więc musiały „wklejać” się, nie zakłócając niczego. Robienie tego samego na terminalach uniksopodobnych byłoby jednak bardziej problematyczne.

grawitacja
źródło
10
Hmm W Vimie „szarpnięcie” oznacza raczej kopiowanie niż wklejanie. Wydaje się to również mieć więcej sensu. Czy jesteś pewien znaczenia tego terminu tutaj?
Konrad Rudolph
11
Tak, jestem pewny. Bash dziedziczy domyślne skróty po ich odpowiednikach Emacsa .
grawitacja
4
@grawity: twój ostatni komentarz jest nieco pomylony. Bash oferuje dwa tryby edycji wiersza poleceń, tryb vim i tryb emacs. Zdarza się, że tryb emacs jest domyślny w większości instalacji. Rodzi to dwuznaczność w używaniu terminu yank , nawet w przypadku bash.
rahmu
1
Aha! I wiedział, programiści Vimperator popełnił błąd, kiedy włącza <C-v>się iw wersji 3, ale nie potrafił wskazać palcem dlaczego .
Izkata
2
@Colin: Nadal brakuje rozróżnienia między schowkiem a wyborem X. Istnieje kilka opcji (PODSTAWOWA, WTÓRNA, SCHOWEK), ale tylko jeden z nich jest zwykle nazywany „schowkiem” - wybór SCHOWKA, ponieważ tam właśnie kopiuje się Ctrl-C i stąd wkleja się Ctrl-V. Podstawowym wyborem nie jest schowek.
grawity
47

Użyj CtrlShiftVdo wklejenia.

Ctrl z innymi znakami jest zwykle używany przez powłokę do specjalnych funkcji.

Akash
źródło
4
Dlaczego więc Linux nie rejestruje CTRL + SHIFT dla funkcji specjalnych; Myślę, że kopiowanie-wklejanie jest bardziej typowe dla niektórych użytkowników niż te funkcje specjalne, prawda?
Yasser Zamani
22
Powłoki istniały na długo przed pojawieniem się terminali graficznych i interfejsów GUI z funkcjami wycinania i wklejania, więc twój argument nie jest tak naprawdę prawidłowy. @YasserZamani
slhck
9
Ctrl + Shift + V jest wykonywany przez emulator terminala (zakładając, że używasz GNOME Terminal), a nie bashsam. Jeśli kiedykolwiek jesteś poza środowiskiem GUI lub używasz innego emulatora terminów, prawdopodobnie to nie zadziała. Nie sądzę, że to polecenie jest przenośne.
rahmu
@rahmu Oh, nie miałem o tym pojęcia. Używaj tylko standardowych instalacji Ubuntu. Czy istnieje uniwersalne polecenie?
Akash
2
Prawdopodobnie nie ma dostępu do schowka (tylko Shift + Ins dla podstawowego wyboru). Nawet sam schowek jest rzeczą X11, niedostępną z tty. Jednak Ctrl + Shift + V jest obsługiwany przez GNOME Terminal, Xfce4 Terminal, KDE Konsole; obejmuje to najpopularniejsze środowiska GUI.
grawitacja
20

Oto ogólne ustawienia wklejania kopii z popularnych terminali:

gnome-terminal (najpopularniejszy w systemie Linux)
Kopiuj : CtrlShiftC
Wklej : CtrlShiftV
Uwaga : Wybierz, aby skopiować i middle-clickwkleić również działa, ale używa alternatywnego schowka.

PuTTY (najpopularniejszy zacisk w Windows)
Kopiowanie : (Proszę zaznaczyć myszką, bez interakcji klawiatury)
Pasta : Right-click (lub bardziej wiarygodnie: shiftRight-click)
Uwaga : Aplikacje, które mają wejście myszy (jak vimi links) może kraść Right-click- shiftRight-clickbędzie zawsze pracować w dowolnej aplikacji.


Kopiowanie terminala OSX : AppleC
Wklej : AppleV
Uwaga: Aplikacje, które przejmują kontrolę myszy (jak vimi links) mogą zastąpić sposób zaznaczania tekstu, w takim przypadku kopiowanie nie będzie działać w oczekiwany sposób. W takich przypadkach przytrzymaj wciśnięty Controlprzycisk myszy, aby wybrać. Interakcja myszy z aplikacjami jest domyślnie wyłączona w ustawieniach terminalu, więc większość ludzi nawet o tym nie wie.

tylerl
źródło
Nie jest cmd.exebardziej popularny niż PuTTY w systemie Windows? :-)
Ben
@Ben Nie jako terminal SSH.
tylerl
1
Nie, cmd.exenie jest terminalem SSH. To bardzo prawda.
Ben
3
@Ben: To wcale nie jest terminal - tylko powłoka. Domyślnym terminalem w systemie Windows jest komponent csrss „Konsola Windows”.
grawitacja
@Ben, ale kliknięcie prawym przyciskiem myszy, aby wkleić, działa również cmd.exe(i jest to jedyny sposób, jeśli nie chcesz otworzyć menu> edycja> wklej) w trybie szybkiej edycji . Nie ma skrótu w wierszu poleceń sprzed win10
phuclv,
17

Jest głęboko zakorzenioną tradycją, że Ctrlklucz wraz z literą generuje znaki sterujące ASCII znalezione przez odjęcie 64 od wartości ASCII wielkiej litery. To obliczenie odwzorowuje Ctrl- Ana 1 i tak dalej. Na przykład Ctrl- Iis Taband Ctrl- Jis linefeed.

Nie ma podobnej tradycji dla Ctrl- Shift. Ctrl- Shift- Vnie oczekuje się, aby wywoływał specyficzny charakter.

Emulatory terminali muszą wspierać tradycję poprzez transparentne przechodzenie przez Ctrlkonwencję, pozwalając jej pojawiać się jako wejście znaków do programów obsługiwanych przez to okno terminala. Programy terminalowe mapują klawisze sterujące na polecenia. Na przykład Bash używa Ctrl- Vjako polecenia, które oznacza „dosłownie weź następny znak”. Umożliwia to osadzenie znaku sterującego w wierszu polecenia. Jeśli terminal kradnie klawisze sterujące na własny użytek, takie polecenia stają się niedostępne. Przechwytywanie Ctrl- Vbo meta-funkcja nie wchodzi w rachubę (przynajmniej w konfiguracji domyślnej).

Jednak emulatory terminali mogą przechwytywać Ctrl- Shift- Vco nie powinno generować postaci. Ctrl- Shift- Vnie jest standardem; jest to Gnome Terminal (może być w niektórych innych terminalach).

Na komputerach Unix opartych na Xie konwencja jest taka, że ​​do kopiowania nie jest potrzebne żadne polecenie. Po prostu zaznacz tekst. A środkowy przycisk wkleja ten tekst w innym miejscu. Przekonasz się, że działa zarówno w Xterm, Gnome Terminal i Firefox.

Ctrl- Vjest konwencją Microsoft Windows, która jest imitacją Apple- Vz Macintosha.

Kaz
źródło
3
Nie jest to dokładnie odejmowanie - tradycyjnie Ctrl wyczyścił szósty i siódmy bit znaku; z tego powodu Ctrl + Shift + litera działa identycznie jak Ctrl + Letter w większości terminali (chyba że jest to jawnie zastąpione przez terminal, jak w przypadku skrótów kopiuj / wklej).
grawitacja
1
Ponieważ klucze są zasadniczo losowo uporządkowane zgodnie ze standardem ASCII, pamięć ROM programu zawiera kilka tabel przeglądowych, które pomagają w generowaniu kodów ASCII. ... Przytrzymanie własnego klawisza CONTROL po naciśnięciu innego klawisza powoduje kolejne przeglądanie tabeli. [Podręcznik techniczny serii VT100, 4.4.9.3, cyfrowy].
Kaz
1
@Linger dzięki za edycję. Ładnie się renderuje, ale nie ma mowy, żeby wpisywać wszystkie te <kbd>tagi w przyszłych postach.
Kaz
Ctrl-Ajest 1. Jak mogę tego spróbować? Mój terminal Gnome nic nie robi po naciśnięciu Ctrl-A.
Robert
3

Dla mnie najprostszym sposobem na skopiowanie wklejania w powłoce jest:

Wybierz kod, który chcesz, a następnie wklej go, klikając mouse-middle-key

Pedro Lobito
źródło
1
Tak długo, jak masz środkowy klawisz myszy.
jpierson
1
@jpierson nie, że zdecydowanie to zalecam, ale możesz napisać mały skrypt, który po prostu używa xdotool click 2do emulacji kliknięcia trzeciego przycisku. Następnie, w dowolnym menedżerze okien / środowisku pulpitu, w którym jesteś, możesz powiązać ten skrypt z kluczem - powiedzmy mod i(dla wstawiania) lub dowolnymi dostępnymi skrótami klawiszowymi (lub jakimkolwiek modem, co może oznaczać - co tak naprawdę zależy od miejsca, w którym je powiążesz)
dylnmc,
2

Możemy użyć przycisku wstawiania klawiatury do kopiowania i wklejania (w starych klawiaturach może brakować)

Kopiuj : CtrlInsert
Wklej :CtrlShiftInsert

Bharat
źródło
1

możesz również użyć środkowego przycisku myszy, jeśli czujesz się leniwy i wybierz polecenie z dokumentu tekstowego, skryptu, strony internetowej lub forum. po wybraniu zamierzonego polecenia wystarczy przejść do terminala i kliknąć środkowy przycisk myszy. Używam tej metody, ponieważ używam linuksa szczeniaka, który nie wydaje się wspierać normalnego zachowania kliknięcia prawym przyciskiem myszy i wklejenia. robi to w oknie obsługi plików, po prostu nie w oknie terminala. nie wiem dlaczego, ale jestem cicho zadowolony, że dowiedziałem się o metodzie środkowego przycisku, bardzo przydatny! ;-)

m1cha3ll0w3
źródło