Jak przesuwać kursor słowo po słowie w terminalu OS X

762

Znam kombinację Ctrl+, Aaby przejść na początek bieżącego polecenia i Ctrl+, Eaby przejść na koniec.

Ale czy jest jakiś sposób przeskakiwania słowo po słowie, tak jak Alt+ / w aplikacjach Cocoa?

Blaszany Człowiek
źródło
2
Jakiej powłoki używasz? Grzmotnąć?
Sargun Dhillon,
4
iTerm2 jest o wiele ładniejszy niż wbudowany terminal. Poniżej zamieściłem instrukcje dotyczące dostosowywania klawiatury :)
cwd
21
Na ALTskróty zostały dodane do terminalu w najnowszej wersji OS X.
Mosty Mostacho,
7
Moim zdaniem nie jest to wykluczone, powłoka Bash jest odpowiednim środowiskiem programistycznym, a powiązania readline są wszechobecne w większości popularnych aplikacji CLI Linux. Spójrz także na liczbę głosów pozytywnych, o których mówiła społeczność.
GL2014
11
Ponownie otwórz głosowanie, terminal OS X bardzo liczy się jako narzędzie do programowania.
djechlin

Odpowiedzi:

566

Po wyjęciu z pudełka możesz użyć dość dziwnego Esc+, Faby przejść na początek następnego słowa i Esc+, Baby przejść na początek bieżącego słowa.

Kristian J.
źródło
47
Ponowne naciśnięcie obu klawiszy było niewygodne, aby ponownie wykonać polecenie. Uważam, że to dość kiepskie, aby to zrobić w terminalu Mac OSX, w porównaniu do terminalu GNOME.
Phương Nguyễn
244
Możesz włączyć „Użyj opcji jako klawisza meta” w Terminalu> Preferencje> Ustawienia> [profil]> Klawiatura . Nie musisz ręcznie wpisywać Esc osobno.
Chris Page
7
Również jeśli naciśniesz Esc+ Fna końcu linii lub inną kombinację klawiszy na początku linii, to po prostu wstawi literę. Denerwujący!
Noldorin
10
Re „bizarre”: „F” i „B” oznaczają „Forward” i „Back”. Control-F przesuwa kursor do przodu o jeden znak, a Control-B przesuwa kursor o jeden do tyłu. Użycie modyfikatora Meta (lub ESC) oznacza „poruszanie się po słowach”. Są to wiązania kompatybilne z Emacsem. Jeśli używasz bash, istnieje możliwość użycia powiązań kompatybilnych z vi lub możesz je całkowicie dostosować ~/.inputrc.
Chris Page
5
Używanie opcji jako meta nie jest niestety opcją dla tych z nas, którzy potrzebują klawisza opcji do wpisywania ważnych symboli powłoki, takich jak ~ i | (jak na francuskiej klawiaturze).
Eric O Lebigot,
417

W systemie Mac OS X - domyślnie działają następujące skróty klawiaturowe. Pamiętaj, że klawisz Opcja musi działać tak, jak Meta w preferencjach terminalu (w zakładce klawiatury)

  • alt (⌥)+, Faby przejść o F do przodu o słowo
  • alt (⌥)+, Baby skoczyć B ackward jednym słowem

Zauważyłem, że domyślne skróty klawiszowe emacs do prostej nawigacji tekstowej działają na powłoki bash. Możesz użyć

  • alt (⌥)+, Daby usunąć słowo zaczynające się od bieżącej pozycji kursora
  • ctrl+, Aaby przejść do początku linii
  • ctrl+, Eaby przejść do końca linii
  • ctrl+, Kaby zabić linię, zaczynając od pozycji kursora
  • ctrl+, Yaby wkleić tekst z bufora zabijania
  • ctrl+, Raby cofnąć wyszukiwanie poleceń wpisanych w przeszłości z Twojej historii
  • ctrl+ Sdo wyszukiwania do przodu (działa dla mnie w Zsh, ale nie bash)
  • ctrl+, Faby przejść do przodu o char
  • ctrl+, Baby przejść do tyłu o znak
  • ctrl+, Waby usunąć słowo wstecz od pozycji kursora
Varun Katta
źródło
1
Dzięki! Zastanawiałem się, dlaczego to nie wyszło z pudełka, właśnie tego potrzebowałem.
Flov,
11
Możesz zmienić meta w iterm2 w następujący sposób: Preferencje -> Profile -> Klawisze -> Lewy klawisz opcji działa jak +ESC, wtedy możesz użyć OPCJI f / b, aby odpowiednio przesunąć słowo do przodu i do tyłu. Więcej
Alan Dong,
5
[ Ctrl + W ] - aby usunąć słowo wstecz od pozycji kursora
YemSalat 20.04.2016
[ctrl + u] - aby usunąć cały wpis
Cornelius
286

Oto jak możesz to zrobić

Domyślnie Terminal ma następujące skróty do przenoszenia (lewo i prawo) słowo po słowie:

  • esc+ B(po lewej)
  • esc+ F(z prawej)

Możesz skonfigurować alt+ i wygenerować te sekwencje:

  • Otwórz preferencje terminala ( cmd+ ,);
  • Na karcie Ustawienia wybierz Klawiatura i kliknij dwukrotnie, ⌥ ←jeśli tam jest, lub dodaj ją, jeśli jej nie ma.
  • Ustaw modyfikator według potrzeb i wpisz w polu klawisz skrótu: esc+ B, generując tekst \033b(nie możesz wpisać tego tekstu ręcznie).
  • Powtórz dla poprawnego słowa ( esc+ Fstaje się \033f)

Alternatywnie możesz odnieść się do tego postu na blogu w textmate:

http://blog.macromates.com/2006/word-movement-in-terminal/

Fil
źródło
7
Użytkownicy systemów MacOSX 10+ i iTerm: albo przypisujesz skrót klawiszowy do preferencji globalnych, albo jako kombinację klawiszy profilu. Należy wybrać: „Wyślij Ucieczka Sequence” na rozwijanym wybrać i wejście tylko Bdo tyłu lub Fdo przodu w Esc+dziedzinie
Gus
+1 za wspaniały mnemonik, o którym wcześniej nie myślałem. Na pewno / niestety nie zapamiętam tego teraz, ponieważ skonfigurowałem alt lefti alt rightwygenerowałem te sekwencje
Arc676
Jeśli dodam mapowanie klawiszy do terminala, spowoduje to powiązanie go z „^ [B” zamiast Esc-B.
Andrea Bergonzo,
164

Przełącz na iTerm2 . Jest darmowy i znacznie ładniejszy niż zwykły stary terminal. Ma także wiele innych opcji dostosowywania, takich jak skróty klawiaturowe.

Uwielbiam też to, że możesz używać przycisków cmd1-9 do przełączania się między kartami. Spróbuj, a nigdy nie wrócisz do zwykłego terminalu :)

Jak skonfigurować niestandardowe preferencje klawiatury w iterm2

  • Zainstaluj iTerm2
  • Uruchom, a następnie przejdź do okienka preferencji.
  • Wybierz kartę profili klawiatury
  • Musisz albo skopiować profil do czegoś nowego, a następnie usunąć skróty klawiszowe, takie jak ^+ Right/, Leftlub jeśli nie zależy ci na kopii zapasowej, po prostu usuń je z profilu domyślnego.
  • Następnie upewnij się, że Twój zmodyfikowany profil jest wybrany (oznaczony gwiazdką)

Zdjęcie 1.png

  • Teraz wybierz zakładkę klawiatury (bardzo górny rząd)

iTerm 2

  • Kliknij przycisk plus, aby dodać nowy skrót klawiaturowy
  • W pierwszym polu wpisz CMD+Left arrow
  • W drugim polu wybierz „wyślij kod ucieczki”
  • W trzecim polu wpisz literę B

Zdjęcie 2.png

  • Powtórz z pożądanymi kombinacjami klawiszy. escape+ Bprzesuwa jedno słowo w lewo, escape+ fprzesuwa jedno słowo w prawo.
  • możesz również ustawić cmd+, daby usunąć słowo przed kursorem za pomocą escape+d

Często naciskam niewłaściwy przycisk ( cmd/ control/ alt) za pomocą klawisza strzałki, więc mam kombinacje klawiszy strzałek z tymi przyciskami skonfigurowanymi do przeskakiwania do przodu i do tyłu słów, ale proszę, rób to, co najbardziej Ci odpowiada.

cwd
źródło
4
Bez względu na to, co robię, nie mogę wejść Ctrl + Arrow Leftani Right- Upi Downdziała: / próbowałem z nowym profilem ustawionym domyślnie i bez niego
Tobi
4
Rozwiązanie: Musiałem wyłączyć skróty kontroli misji w Preferencjach systemowych MacOS -> Klawiatura :)
Tobi
Powyższa instrukcja nie działa już z iTerm2. Proszę zobaczyć moje poniższe odpowiedzi dla iTerm2 Build 3.3.4.
Zawieś
150

W rzeczywistości istnieje znacznie lepsze podejście. Przytrzymaj option( altna niektórych klawiaturach) i naciskaj klawisze strzałek w lewo lub w prawo, aby poruszać się po słowie. Proste.

option
option

Również ctrlebędzie można dostać się do końca linii i ctrlapotrwa do początku.

mdubez
źródło
2
Czasami to nie działa w niektórych przypadkach. Dla mnie, kiedy otworzyłem Terminal.app, było w porządku, ale dla IntelliJ właśnie wydrukowałem [Di [C. Aby to naprawić, dodaj bind '"[D": backward-word'i bind '"[C": forward-word'do mojego .bashrc.
Jamie Counsell
@JamieCounsell Dodałem coś wiążącego do mojego, .bashrcale to nie zadziałało, czy coś jest dla mnie nie tak? (Używam RubyMine)
张艳军
@ 张艳军 Nie jestem pewien, czy RubyMine czyta, .bashrckiedy terminal się uruchamia. Spróbuj echo "here"sprawdzić, czy ten komunikat wyświetla się po otwarciu nowego terminala. Ponadto musisz zamknąć i ponownie otworzyć terminal lub uruchomić source ~/.bashrc, aby odczytać nowy plik.
Jamie Counsell
79

Mam Alt+ / pracuję: otwórz Preferencje »Ustawienia» Klawiatura , ustaw pozycję kursora opcji w lewo, aby wysłać ciąg do powłoki: \ 033b , i ustaw kursor opcji w prawo, aby wysłać ciąg do powłoki: \ 033f . Możesz go również użyć do innych kombinacji klawiszy Control.

Peter Hilton
źródło
20
Aby uzyskać \ 033b, musisz nacisnąć Esc, a następnie b.
Matthew Schinckel,
7
Jestem na Snow Leopard i stwierdzam, że działa to tylko po włączeniu Enable option as meta key. Nawiasem mówiąc, jest bardzo fajnie. Klucz z pewnością będzie znacznie wygodniejszy do osiągnięcia w porównaniu do Esc + B lub Esc + F
Phương Nguyễn
2
Z ciekawości, co dokładnie się tutaj dzieje? Dlaczego ten kod różni się na początku w OSX? Jak mogę znaleźć inne takie kody?
Koobz
w moim Macu Preferencje> Profile> Klucze lewy klawisz opcji ustawiony jako + Ecs
Arun
38

W rzeczywistości zależy to od używanej powłoki, jednak większość powłok ma podobne powiązania. Powiązania, do których się odwołujesz (np. Ctrl+ AI Ctrl+ E), są powiązaniami, które znajdziesz w wielu innych programach i są używane od wieków, BTW działa również w większości aplikacji interfejsu użytkownika.

Oto wygląd domyślnych powiązań dla Bash:

Najważniejsze skróty klawiaturowe Bash

Pamiętaj również, że możesz je dostosować. Musisz utworzyć plik o dowolnej nazwie, nazwałem mój .bash_key_bindings i umieściłem go w moim katalogu domowym. Tam możesz ustawić kilka ogólnych opcji bash, a także możesz ustawić powiązania klawiszy. Aby upewnić się, że zostały zastosowane, musisz zmodyfikować plik o nazwie „.bashrc”, który bash wczytuje podczas uruchamiania (musisz go utworzyć, jeśli nie istnieje) i wykonać tam wywołanie:

bind -f ~/.bash_key_bindings

~ oznacza katalog domowy w bash, jak wspomniano powyżej, możesz nazwać plik tak, jak chcesz, a także umieścić go w dowolnym miejscu, pod warunkiem, że podasz właściwą ścieżkę + nazwę do powiązania.

Pokażę kilka fragmentów mojego pliku .bash_key_bindings:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off

Ustawiają tylko kilka opcji (np. Wyłączają dzwonek; wszystko to można sprawdzić na stronie bash).

"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert

Zapewniają one, że same postacie nic nie robią, tylko upewniają się, że znak jest „wpisany” (wstawiają się do powłoki).

"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line

To całkiem interesujące. Jeśli uderzę Ctrl+ Dsam (wybrałem d do usunięcia), nic się nie stanie. Ale jeśli następnie wpisuję małą literę w, słowo po lewej stronie kursora zostanie usunięte. Jednak po wpisaniu dużej litery słowo po prawej stronie kursora zostanie zabite. To samo dotyczy l i L w odniesieniu do całej linii rozpoczynającej się od kursora. Jeśli wpiszesz „a”, cała linia zostanie faktycznie usunięta (wszystko przed i za kursorem).

Umieściłem przeskakując jedno słowo do przodu na Ctrl+ Fi jedno słowo do tyłu na Ctrl+B

"\C-f": forward-word
"\C-b": backward-word

Jak widzisz, możesz utworzyć skrót, który natychmiast prowadzi do akcji, lub możesz utworzyć taki, który po prostu rozpoczyna sekwencję znaków, a następnie musisz wpisać jeden (lub więcej) znaków, aby akcja miała miejsce jako pokazano w przykładzie powyżej.

Jeśli więc nie jesteś zadowolony z domyślnych powiązań, możesz je dowolnie dostosowywać. Oto link do instrukcji bash, aby uzyskać więcej informacji.

Mecki
źródło
jaki jest commandkod klucza? W twoim przykładzie controljest \C, ale jak command?
Paschalis
Zasadniczo chcę zmapować Ctrl + A na cmd + lewo (przejdź na początek linii)
Paschalis,
1
@Paschalis Na MacOS X, klawisz polecenia jest odwzorowany na Metaw bash ( \M), cmd + left to \M-\e[D. Nie możesz jednak odwzorować cmd + ... na nic, wszystkie skróty poleceń są obsługiwane (a więc połykane) przez samą aplikację Terminal (te nigdy nie są przekazywane do powłoki), a cmd + lewe mapy do „poprzedniego okna”, jeśli masz wiele otwarte okna terminala. Niestety, po prostu nie jest to możliwe w aplikacji Terminal.
Mecki
18

Użyj ustawienia predefiniowanego edycji tekstu naturalnego !

wprowadź opis zdjęcia tutaj

Zasadniczo wiąże, między innymi kluczowymi sekwencjami, Option + Strzałka w lewo do ^[bsekwencji i Opcja + Strzałka w prawo do^[f

Działa to w przypadku fish and bash, a także w terminalu psql.

Dziamid
źródło
Jest to najbardziej efektywny sposób ustawiania dobrego starego mapowania kluczy. Dzięki!
fedesismo
W przypadku, gdy ktoś się myli, tak jak ja, pamiętaj, że to ustawienie wstępne jest dostępne tylko w zakładce Klucze profilu , a nie w zakładce Klawisze najwyższego poziomu .
ben-albrecht
15

Jeśli zdarzyło ci się być użytkownikiem Vima, możesz wypróbować tryb vima basha. Uruchom to lub umieść w swoim ~/.bashrcpliku:

set -o vi

Domyślnie jesteś w trybie wstawiania; naciśnij klawisz Escape i możesz się poruszać tak, jak w trybie normalnym Vima, więc ruch po słowie to wlub b, a zwykłe klawisze ruchu również działają .

jches
źródło
15

Jeśli Use option as meta keyzaznaczysz zakładkę klawiatury w preferencjach, wówczas domyślne polecenia stylu emacs dla odpowiednio słowa do przodu i do tyłu oraz ⌥F( Alt+ F) i ⌥B( Alt+ B).

Polecam czytanie From Bash to Z-Shell . Jeśli chcesz zwiększyć swoje umiejętności bash / zsh!

Matt
źródło
1
Tak, to działa. Ale problem polega na tym, że chcę wpisać nawiasy klamrowe ([] {} |), które są w Opcjach-7, Opcji-8 i Opcji-9. Opcje są teraz meta, więc kończy się na Meta-7, Meta-8 ... Jakieś pomysły?
Martin Wickman
12

Jak Mac OS X Lion 10.7, Terminal mapy Option- Left/Right Arrowdo Esc- b/fdomyślnie, więc to jest teraz wbudowaną dla bash i innych programów, które wykorzystują te skróty klawiszowe emacs-kompatybilne.

Chris Page
źródło
12

Przytrzymaj klawisz Opcja i kliknij miejsce, w którym chcesz przesunąć kursor

Dan Alboteanu
źródło
1
Niezłe obejście.
duyn9uyen
8

W Bash są one związane z Esc- Bi Esc- F. Bash ma wiele, wiele więcej skrótów klawiaturowych; spójrz na wyjście, bind -paby zobaczyć, jakie są.

Andy Lynch
źródło
4

Pod iterm2„s Preferencje> profil> Keys , to kliknij +poniżej odwzorowań przycisków i nagrać nowy skrót. W polu Akcja wybierz odpowiednio Send Escape Sequencei wpisz blub odpowiednio fdla wstecz i do przodu.

Kiedy próbowałem nagrać jedną dla ( Ctrl+ ), zauważyłem w polu Skrót klawiatury, że strzałka nigdy się nie pojawiła. Okazuje się, że najpierw musiałem wyłączyć Preferencje systemowe Maca> Klawiatura> Skróty> Skróty kontroli misji, aby wszystko działało, ponieważ zastąpią domyślne skróty iterm2. Powinno to dotyczyć również standardowej aplikacji terminalowej.

Preferencje systemowe klawiatury

qix
źródło
1

Nowa odpowiedź dla użytkowników iTerm2 Build 3.3.4:

Krok 1: Preferencje systemowe (macOS X)> Klawiatura> karta Skróty> Wybierz opcję Kontrola misji (lewy panel)> Odznacz skróty oznaczone jako „Przenieś w lewo spację” i „Przenieś w prawo spację”

Krok 2: (iTerm2 Build 3.3.4) Preferencje> Profile> Wybierz * Domyślne (lewy panel)> karta Klawisze> Usuń oba wpisy „⌥->” i „⌥ <-”> Ustaw oba „Lewy przycisk opcji (⌥): ”i„ Prawy klawisz opcji (⌥): ”, aby Esc +

Bez bałaganu z profilami powłoki, bez bałaganu z gorszym terminalem masOS (domyślnie), bez niewygodnych Esc + F / B, płukanie i powtarzanie bez sensu.

Skończona sprawa!!!

Ciesz się tą wskazówką, moi programiści!

Powiesić
źródło
0

Jak już wcześniej odpowiedziałem, możesz dodać set -o viswoje powiązania ~/.bashrcdo użycia vi/ vimkey, lub możesz dodać następną część, .bashrcaby poruszać się za pomocą Ctrlklawiszy strzałek:

# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'

Aby rozpocząć działanie tych wierszy kodu, albo source ~/.bashrcrozpocznij nową sesję terminalową.

Chinmay
źródło