Czy klucze domowe i końcowe mogą być mapowane podczas korzystania z terminalu?

76

homeI endklucze na MacBook Pro mogą być emulowane z fn + strzałka w lewo lub Fn + strzałka w prawo. Lub po zmianie niektórych ustawień za pomocą klawisza Command (Apple) zamiast fn.

Żadne z tych nie działa w terminalu.

Ponieważ często muszę przejść do początku lub końca linii i chciałbym również przeskakiwać do przodu lub do tyłu słowem.

Jak mogę skakać po linii w terminalu?

at01
źródło

Odpowiedzi:

64

Użyj control+ adla HOME i control+ edla END w Terminalu.

Użyj także esc+, faby przejść na początek następnego słowa i esc+, baby przejść na początek bieżącego słowa. (Musisz uważać na bieżące i następne)

Am1rr3zA
źródło
2
doskonały! co powiesz na skakanie po słowie? (Ctrl-lewy i Ctrl-prawy w Windows)
at01
@ at01 Zaktualizowałem swoją odpowiedź.
Am1rr3zA
40
Kto zaprojektował klucze do terminala?!?!
01
4
Wolę używać opcji + strzałka w lewo i opcja + strzałka w prawo do przejścia na początek słów
Allan Jikamu
2
Ctrl + a i Ctrl + e działały dla mnie, ale bez uciekania się do ponownego mapowania naciśnięć klawiszy, jak zaproponowano tutaj tak wielu, wolę alternatywę @ AlphaFighter Shift + Home i Shift + End (Shift + Fn + strzałka w lewo i Shift + Fn + strzałka w prawo na klawiaturze MacBooka Pro) na początku i na końcu linii.
John Rix,
70

Aby odpowiedzieć na pytanie, jak uzyskać początek lub koniec wiersza, wydaje się, że domyślnie Terminal mapuje na niego następujące klucze:

  • shift + home → początek linii, co odpowiada klawiszowi „home” w normalnych terminalach
  • shift + end → koniec linii, co odpowiada klawiszowi „end” w normalnych zaciskach

Jeśli chcesz, aby dom i koniec działały w „normalny” sposób (i nie wymagają zmiany), przejdź do [Menu terminala] → Preferencje → zakładka Profile (lub ustawienia w niektórych wersjach OS X) → zakładka Klawiatura.

Następnie zmodyfikuj / dodaj te klucze, aby były następujące „wyślij ciąg do powłoki”

  • Dom: \033[H
  • koniec: \033[F

Możesz uzyskać tę \033część, naciskając klawisz Escape w oknie dialogowym edycji, jeśli chcesz ją dodać.

Wtedy dom i koniec znów będą działać normalnie (uff).

Zauważ też, że „alt + ←” i „alt + →” domyślnie w mapie terminali na słowo w lewo i słowo w prawo, kolejna przydatna kombinacja do zapamiętania.

W nowszych wersjach systemu Mac OS X, jeśli ekran terminala przesuwa się w górę lub w dół po naciśnięciu klawisza home / end, może być konieczne ustawienie klawisza home \033[1~i end, \033[4~aby uzyskać pożądane wyniki (bez potrzeby zmiany) .

Zmodyfikuj tę odpowiedź, aby dodać bardziej przydatne powiązania klawiszy, ponieważ jest to wiki społeczności.

rogerdpack
źródło
5
\ 033 [H i \ 033 [F dla domu i końca nie działały dla mnie; jednak \ 001 i \ 005 zrobiły to. Możesz wprowadzić te kody w oknie edycji, naciskając ctrl-A i ctrl-E. Używam Zsh, nie jestem pewien, czy to robi jakąkolwiek różnicę.
JW.
shift + home / end wykonał robotę
isaias-b
1
Próbowałem to rozgryźć przez jakiś czas, to mnie uratowało!
Paul Gray,
Działa to świetnie, gdy jesteś w lokalnej aplikacji terminala. Jednak gdy jesteś ssh'd na komputerze z systemem macOS, wydaje się, że już nie działają. Jak to obejść ?!
Ahi Tuna,
2
@AhiTuna SSH to tylko połączenie z sesją terminala, a nie połączenie z emulatorem terminala. Opcje wprowadzania są zawsze definiowane przez dowolny emulator terminala, którego używasz.
Bachsau,
39

Wygląda na to, że szukasz pomocy przy użyciu readline i bash, oto szalona lista rzeczy na klawiaturze zmodyfikowanych z: http://www.math.utah.edu/docs/info/features_7.html#SEC45

Ctrla Przejdź na początek linii.
Ctrle Przejdź na koniec linii.
Escf Przejdź do przodu o słowo.
Escb Cofnij słowo do tyłu.
Ctrll Wyczyść ekran, ponownie drukując bieżącą linię u góry.

Ctrlk Zabij tekst od bieżącej pozycji kursora do końca linii.
Escd Kill od kursora do końca bieżącego słowa lub, jeśli między słowami, do końca następnego słowa.
EscDel Zabij od kursora początek poprzedniego słowa lub, jeśli między słowami, do początku poprzedniego słowa.
Ctrlw Kill od kursora do poprzedniej białej spacji. Jest inaczej niż EscDelCtrla dlatego, że różnią się granice słów.

Ctrld Usuń znak pod kursorem.
Ctrl_ Cofnij ostatnią rzecz, którą zrobiłeś. Możesz cofnąć całą drogę do pustej linii.

A oto, jak przeciągnąć tekst z powrotem do wiersza. Yanking oznacza skopiowanie ostatnio zabitego tekstu z bufora zabijania.

Ctrly Wciągnij ostatnio zabity tekst z powrotem do bufora pod kursorem.
Escy Obróć pierścień-zabójca i podciągnij nowy top. Możesz to zrobić tylko wtedy, gdy poprzednie polecenie to Ctrlylub Escy.

ConstantineK
źródło
to jest nieocenione - dzięki - chciałbym, żeby było to gdzieś jako plik do wydruku!
matt b
Zdaję sobie sprawę, że nie jest to „zoptymalizowane”, ale; Plik -> Wydrukować?
Jason Salaz,
Wow, są super niezręczne w porównaniu z terminem na Linuksie .. jakikolwiek sposób, aby zmienić ten nonsens?
btk
Tak, wypróbuj stronę podręcznika użytkownika Bash. (Sam nie wiem, jak to zrobić).
SilverWolf,
6

Dla tych, którzy wolą używać klawiszy strzałek, naciśnięcie fnShift+ Left Arrowzabierze Cię do domu z wiersza poleceń. Podobnie, fnShift+ Right Arrowzabierze Cię do końca.

Paul
źródło
6

Możesz przenosić jedno słowo na raz za pomocą option+ lefti option+ right.

Jeśli chodzi o użycie homei end, domyślne powiązania terminala są następujące:

  • shift+ home→ przeskocz na początek linii
  • shift+ end→ przeskocz na koniec linii
  • home → przewiń do góry bufora przewijania
  • end → przewiń do dołu bufora przewijania

W wielu innych aplikacjach terminalowych (na wielu platformach) te zmodyfikowane i niezmodyfikowane pary są odwrócone (tj. Nagie homei endsłużą do przeskakiwania wokół bieżącej linii, a zmodyfikowane wersje (czy to przez shiftcoś innego) służą do nawigacji w buforze przewijania ). Możesz odwrócić powiązania terminala, aby działały w ten sposób, jeśli chcesz, wykonując następujące czynności:

Przejdź do menu Terminal → Preferencje → karta Ustawienia / Profil → podkarta Klawiatura.

Następnie zmodyfikuj pary klucz-akcja, tak aby były następujące:

  • ↖︎: Wyślij tekst: \ 033 [H
  • ⇧↖︎: Przewiń do góry
  • ↘︎: Wyślij tekst: \ 033 [F
  • ⇧↘︎: Przewiń do dołu

Uwaga: \ 033 wpisuje się w polu tekstowym do wysłania w oknie dialogowym Edycja, naciskając klawisz Escape.

Będąc tam, możesz chcieć w podobny sposób zamienić powiązania zmodyfikowanych i niezmodyfikowanych page uporaz page down, aby zachować spójność: naciśnięcie klawisza nawigacyjnego za shiftpomocą polecenia dla samego Terminala (aby nawigować po buforze przewijania do tyłu jak w dokumencie), podczas gdy naciśnięcie jednego bez wysyła naciśnięcia klawisza przez co ucieka do wewnątrz niego (np bash, less, nano, screen, itd.). Do tego służą pary klucz-akcja:

  • ⇞: Wyślij tekst: \ 033 [5 ~
  • ⇧⇞: Przewiń stronę w górę
  • ⇟: Wyślij tekst: \ 033 [6 ~
  • ⇧⇟: Przewiń stronę w dół
Terry N.
źródło
4

Inne odpowiedzi są świetne i bardziej przenośne, ale oto „sposób OS X” dla zwykłej klawiatury (co jest przeciwieństwem wielu innych terminali). Spróbuj wykonać następujące czynności:

ShiftHome- Początek linii
ShiftEnd- Koniec linii

From http://www.greenend.org.uk/rjk/tech/macbits.html

Alpha Fighter
źródło
4

Mapowanie homei endklucze z pożądaną funkcjonalnością z łatwością rozwiążą problem.

Opublikowano wiele odpowiedzi, ale jeśli ich używasz zsh, możesz ustawić home:

\001

i ustawić endna:

\005

klikając preferencje - profil - klawiatura.

Dean Seo
źródło
Próbowałem tego również, ale potem łamie Home i End w vim :( Możesz zamapować je na to, co zasugerował Alfredo Cardigliano: Klucz: ↖ Akcja: \ 033OH Klucz: ↗ Akcja: \ 033OF
curlingdude
To działało idealnie dla mnie! Używam tylko Nano, więc tutaj nie ma problemów.
Sterling Bourne,
Tak, to działa, ale ogólnie nie rozwiązuje problemu. Przeniosłem się z bash na zsh i używano FN-SHIFT-LEFT / RIGHT .. to rozwiązało mój problem: stackoverflow.com/questions/8638012/...
vlk
1

Jest to najbardziej skuteczny sposób, aby działał również z vimem. Przejdź do Terminal -> Preferencje -> Profile -> Klawiatura i dodaj:

Klawisz: ↖ Działanie: \ 033OH

Klawisz: ↗ Działanie: \ 033OF

Alfredo Cardigliano
źródło
1

Chciałbym zapewnić alternatywne rozwiązanie tego problemu. Działa to świetnie, jeśli jesteś użytkownikiem vi. Wiązania klawiszy Vima w terminalu umożliwiają korzystanie z terminala w stylu vim. Możesz to zrobić, wpisując set -o viterminal i możesz go dowolnie .bash_profilezainstalować. Po tym twój terminal jest w rzeczywistości edytorem vim. Możesz użyć escklawisza, aby przejść do trybu poleceń i chodzić w vim sposób. Na przykład 0prowadzi do początku i $do końca. Możesz także użyć Ii, Aaby przejść do początku i końca i od razu przejść do trybu edycji. wi bpozwól ci poruszać się do przodu i do tyłu o jedno słowo. A jeśli spróbujesz przejść do trybu wizualnego, naciskającv, otrzymasz edytor vim, a tekst, który opuścisz, zostanie wykonany w terminalu.

Pamiętaj, że to powiązanie klawiszy vim unieważni wszystkie skróty, których nauczyłeś się z innych odpowiedzi.

Fxyang
źródło
0

oto lista w formie do wydruku, zgodnie z życzeniem :)

http://pastebin.com/uCqwn7qs

Naprawiłem również „błąd” w opisie. Oto, co pierwotnie można przeczytać w instrukcjach:

ESC-d Zabij od kursora początek poprzedniego słowa lub, jeśli między słowami, do początku poprzedniego słowa.

Pachnie to jak pomyłka „wklej i wklej”, ponieważ oba zdania częściowe mówią to samo. Mówiąc ze zwykłej logiki, pierwsza połowa musi w rzeczywistości czytać „od kursora do początku bieżącego słowa”.

ręka pomocna
źródło
0

... co powiesz na skakanie po słowie? (Ctrl-lewy i Ctrl-prawy w Windows)

# in ~/.inputrc
"\033[5C": forward-word
"\033[5D": backward-word
calu
źródło