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

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

When skopiuję coś do schowka i naciskam Ctrl + V w Bash'u, nic się nie dzieje; Jednakże, kliknięcie prawym przyciskiem myszy i wybranie Wklej wykonuje zadanie.

Dlaczego? Czy za tym zachowaniem w Linuksie kryje się jakiś rozsądny problem (jestem tego pewien)?

Odpowiedzi (7)

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

W czasach fizycznych terminali , schowki sesyjne nie istniały, tylko kilka programów obsługiwało wewnętrzne kopiowanie/wklejanie - często pod nazwą “bufory” lub “kill rings” - i używało różnych różnych naciśnięć klawiszy. Na przykład, powłoka bash używa CtrlK lub CtrlU do “kill” (wycinania), CtrlY do “yank” (wklejania); pochodzi to z edytora emacs .

CtrlC prawie wszędzie w Uniksie był klawiszem “interrupt” , używanym do anulowania bieżącego programu lub operacji. Klawisz CtrlV często oznaczał “dosłowne wstawienie” - to znaczy wstawienie następującego znaku dosłownie bez wykonywania żadnej powiązanej z nim akcji. Na przykład, normalny Esc przełącza się w tryb komend w edytorze vi, ale CtrlV, Esc wstawia znak ESC do dokumentu.

Użycie CtrlC do kopiowania i CtrlV do wklejania ze schowka sesyjnego zostało wprowadzone przez system Mac OS w 1983 roku i Microsoft Windows 3.x w 1990 roku. (Wcześniejsze wersje Windows (1.x i 2.x), jak również IBM OS/2, obsługiwały tylko IBM CUA klawisze CtrlIns do kopiowania i ShiftIns do wklejania; te skróty są nadal obsługiwane przez wszystkie wersje Windows)

Kiedy GUI z obsługą schowka dotarły w końcu do Uniksa, naciśnięcia klawiszy Ctrl były już używane przez wiele programów terminalowych. Dodatkowo, interfejs graficzny X miał nieco inne mechanizmy : “selekcje” i “wycinanie buforów”. Nawet teraz możesz zaznaczyć tekst w jednym programie i wstawić go za pomocą środkowego przycisku myszy, bez konieczności wykonywania żadnych wyraźnych czynności kopiowania.

W skrócie, do czasu napisania Xterm i GNOME Terminal (zgaduję, że używasz tego ostatniego), CtrlV już miał zupełnie inne znaczenie przez wiele lat i nie mógł być zmieniony. Dodatkowo, alternatywna metoda kopiowania tekstu - “wybór” - była już obecna w X11, więc wyraźne działanie kopiowania/wklejania było prawdopodobnie uważane za nie tak ważne jak w Windows. Oznacza to, że trzeba było wybierać różne skróty klawiaturowe - na przykład, większość nowoczesnych programów terminalowych, takich jak GNOME Terminal, używa CtrlShiftC i CtrlShiftV. (Jeśli używasz Xterm, te same skróty mogą być dodane ręcznie za pomocą XTerm*vt100*translations Xresource. Rxvt nie ma takiej opcji.)

(Większość zestawów narzędzi X11 obsługuje również klawisze CUA “copy” i “paste”, które nie są sprzeczne z programami terminali. Niestety, implementacje są raczej niespójne - CtrlIns kopiuje do “schowka” w większości programów (GTK, Qt4, ale ignorowane przez Xaw); jednakże ShiftIns wkleja z “wyboru głównego” w większości programów GTK i Qt4, ale z “schowka” w Firefoksie, oraz z “buforów cięcia” w nowobolidzie Xaw. )


Wszystko to powiedziane, niektóre terminale lub konsole (w szczególności konsola Windows 10) do wspierają te klucze. Ponieważ konsola Windows zawsze miała oddzielny tryb “zaznacz/wybierz”, CtrlC ma teraz również dwa znaczenia oparte na kontekście - w trybie zwykłym wysyła przerwanie, w trybie select kopiuje do schowka (tak jak Enter kiedyś).

W międzyczasie, narzędzia z linii poleceń Windows nigdy tak naprawdę nie używały CtrlV do niczego, więc było to związane z “wklejaniem” bez zakłócania niczego. Robienie tego samego na terminalach uniksopodobnych byłoby jednak bardziej problematyczne.

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

Do wklejania używa się CtrlShiftV.

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

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

Oto twoje ogólne ustawienia wklejania kopii z popularnymi terminalami:

gnome-terminal (najbardziej popularny na Linuksie) Kopiuj : CtrlShiftC Wklej : CtrlShiftV Uwaga : CtrlShiftV Wybierz do skopiowania i kliknij środkowym przyciskiem myszki, aby wkleić również działa, ale używa alternatywnego schowka.

PuTTY (najpopularniejszy terminal w Windows) Kopiuj : CtrlShiftC : CtrlShiftV Kopiuj : (wybierz za pomocą myszy, bez interakcji z klawiaturą) Wklej : Kliknij prawym przyciskiem myszy (lub bardziej niezawodnie: shiftRightRight-click) Uwaga : Aplikacje, które pobierają dane z klawiatury (jak vim i links) mogą kraść prawym przyciskiem myszy – shiftRight-click będzie zawsze działać w każdej aplikacji.

OssX Terminal Kopiuj : (wybierz myszą, brak interakcji z klawiaturą) Kopiuj : AppleC Wklej : AppleV Uwaga:Aplikacje, które przejmują kontrolę nad myszą (jak vim i links) mogą zastąpić to, co oznacza zaznaczenie tekstu, w którym to przypadku kopia nie będzie działać tak, jak tego oczekujesz. W takich przypadkach należy przytrzymać przycisk Control podczas przeciągania myszką w celu zaznaczenia. Interakcja myszką z aplikacjami jest domyślnie wyłączona w ustawieniach terminala, więc większość ludzi nawet o tym nie wie.

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

Jest głęboko zakorzenioną tradycją, że klucz Ctrl wraz z literą generuje znaki kontrolne ASCII znalezione poprzez odjęcie 64 od wartości ASCII dużej litery. To obliczenie mapuje Ctrl-A do 1, i tak dalej. Na przykład Ctrl-I to Tab, a Ctrl-J to linefeed.

Nie ma podobnej tradycji dla Ctrl-Shift. Ctrl-Shift-V nie powinien tworzyć żadnych specyficznych znaków.

Emulatory terminala muszą wspierać tradycję poprzez przejrzyste przejście przez konwencję Ctrl, pozwalając na wyświetlanie jej jako wejścia znaków do programów obsługiwanych przez to okno terminala. Programy bazujące na terminalu mapują klucze sterujące do poleceń. Na przykład, Bash używa Ctrl-V jako komendy, co oznacza “weź następny znak dosłownie”. Pozwala to na osadzenie znaku sterującego w wierszu poleceń. Jeśli terminal kradnie klawisze sterujące na własny użytek, to takie komendy stają się niedostępne. Tak więc przechwytywanie Ctrl-V dla meta-funkcji jest wykluczone (przynajmniej w domyślnej konfiguracji).

Jednakże emulatory terminala mogą przechwytywać Ctrl-Shift-V, który nie powinien generować znaku. Ctrl-Shift-V nie jest standardem; jest to Gnome Terminal (który może być w niektórych innych terminalach).

Na uniksowych komputerach stacjonarnych opartych na X-ach konwencja jest taka, że do skopiowania nie jest potrzebne żadne polecenie. Po prostu zaznaczasz tekst. A środkowy przycisk wkleja ten tekst gdzie indziej. Przekonasz się, że działa on zarówno w Xterm, Gnome Terminal jak i Firefox.

Ctrl-V jest konwencją Microsoft Windows, która jest imitacją Apple-V z Macintosha.

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

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

Wybierz kod, który chcesz, a następnie wklej go klikając myszką-środkiem klawisza

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

Do kopiowania i wklejania możemy użyć przycisku klawiatury (w starych klawiaturach może go brakować)

Kopiuj : CtrlInsert Wklej : CtrlShiftInsert

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

Możesz również użyć środkowego przycisku myszy, jeśli czujesz się leniwy i wybrać komendę z dokumentu tekstowego, skryptu, strony internetowej lub forum. po wybraniu zamierzonej komendy po prostu przenieś się do swojego terminalu i kliknij środkowy przycisk myszy. Używam tej metody, ponieważ używam szczeniaka linuksa, który nie wydaje się wspierać normalnego zachowania kliknięcia prawym przyciskiem i wklejenia. robi to w oknie obsługi plików, po prostu nie w oknie terminala. nie wiem dlaczego, ale jestem spokojnie zadowolony, że dowiedziałem się o metodzie środkowego przycisku, bardzo przydatna! ;-)