Jak pomijać słowa w terminalu OS X?

11

Powiedzmy, że napisałem długie polecenie w terminalu Mac OSX, tj

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

a teraz chcę zmienić słowo Hellona Hi.

Aby to zrobić, teraz muszę naciskać (lub przytrzymywać) lewy klawisz klawiatury, aż „kursor” dojdzie do końca słowa Hello, a następnie go usunąć. Zwykła technika „przytrzymywania opcji” nie działa tak jak w większości innych aplikacji OS X.

Czy istnieje sposób na pominięcie słowa na raz (lub inny krótszy sposób na uzyskanie kursora)?

Yuval
źródło

Odpowiedzi:

19

Edycja wiersza poleceń jest funkcją twojej powłoki, a nie terminala . Prawdopodobnie twoja powłoka jest bash i prawdopodobnie styl edycji wiersza poleceń jest ustawiony na „emacs”.

Oto kilka kombinacji klawiszy w stylu Emacsa, które mogą Ci się przydać:

  • Ca: beginning-of-line
  • Ce: end-of-line
  • Mf: forward-word
  • Mb: backward-word
  • Płyta CD: delete-char
  • MD: kill-word(usuń następne „słowo”)
  • M-DEL: backward-kill-word

C- x oznacza Control+ x, więc Ca jest Control+ a.

M- x oznacza Meta+ x, ale prawdopodobnie nie ma klawisza Meta na klawiaturze. Zamiast tego możesz użyć ESC x (tj. EscapeWtedy x). Terminal ma ustawienie automatycznego wysyłania ESC przed naciśnięciem i przytrzymaniem klawiszy Option. Użycie tej funkcji wyłącza rozszerzoną obsługę znaków, którą Mac OS X zwykle zapewnia podczas korzystania z modyfikatora Opcji. Jeśli więc używasz kilku znaków rozszerzonych i chcesz Option+ xwysłać ESC x , możesz włączyć tę opcję terminala .

W twoim przykładzie istnieje wiele sposobów przejścia na „Cześć”:

  • Wyszukaj „Hello”: Cr H ello Cj (lub ESC)
    • W normalnym Emacsie wystarczy użyć RET ( Return), aby zakończyć wyszukiwanie w bieżącej lokalizacji i powrócić do edycji. Ale w bash domyślne wiązania powodują, że RET (tj. Cm) zawsze wykonuje bieżącą linię, nawet jeśli aktywne jest wyszukiwanie przyrostowe. Więc część Cj / ESC jest odchyleniem od normalnego Emacsa.
  • Przejdź na początek linii i idź do przodu: Ca Mf Cf (lub )
  • Przejdź na początek linii, a następnie przesuń się o słowa: Ca Mf Mf Mb
  • Używaj Mb dużo (naprawdę możliwe, jeśli zamapujesz Option na Meta).

Istnieje również kilka sposobów wykonania żądanej wymiany:

  • usuń słowo i zastąp je: Md H i
  • usuń znaki i zamień je: Cd Cd Cd Cd Cd H i
  • przejdź obok „H” i usuń następującą pracę, zastąp ją: Cf Md i
  • przejdź obok „H” i usuń pozostałe znaki, zamień je: Cf Cd Cd Cd Cd i

Jeśli zatrzymałeś się na końcu słowa (może przez Ca Mf Mf), możesz użyć M-DEL H i.

Możesz zrobić coś takiego, bind -P | lessaby znaleźć inne ciekawe powiązania. Skonsultować się z readline odcinek bash strony man (lub readline częściach bash stron informacyjnych ) dla szczegółów.

Chris Johnsen
źródło
Ok, to tak naprawdę nie dotyczy pytania, ale jak wstawić tam słowa, które wyglądają jak klawisze klawiatury?
Wuffers
1
@Pan. Mężczyzna: używaj <kbd>elementów. Podzbiór HTML jest dozwolone w znacznikach tutaj . Wygląd wynika z lokalnego stylu znacznika (tło, kolor obramowania, styl obramowania, szerokość obramowania itp.). Możesz przejrzeć znaczniki źródłowe mojego postu („wyświetl źródło” na tej stronie ). Zobacz meta.stackexchange.com/questions/5527, mimo że fantazyjny styl jest wyłączony w MSO: meta.stackexchange.com/questions/1939/#23571
Chris Johnsen
Nie jestem pewien, czy to oczywiste, czy nie, zajęło mi to minutę, ale zrozumiałem, że jestem na MBP bez meta-klucza i używam domyślnej konfiguracji terminala. Aby przejść do przodu i do tyłu słów, mogę nacisnąć Esc, a następnie F, lub Esc, a następnie B. Chciałem tylko wspomnieć o tym, ponieważ sposób, w jaki to wyjaśniono powyżej, zmusił mnie do spróbowania nacisnąć Esc + x, a następnie f lub b ...
cwd
Czy istnieje sposób na zmianę środowiska lub powłoki, aby można było wykonać kombinację klawiszy Ctrl lub Fn + strzałka w celu dopasowania do mojego IDE?
codecowboy
1
Możesz także użyć powiązań vi, dodając set -o viplik .bashrc! gnu.org/software/bash/manual/html_node/…
Will Munn
2

Domyślnym wiązaniem readline forward-wordjest Meta-F ( bash(1)strona man, sekcja READLINE , podsekcja Polecenia dotyczące przenoszenia ). Nie jestem jednak pewien, na co Meta tłumaczy się w OS X. Może opcja.

Ignacio Vazquez-Abrams
źródło
+1 - masz rację. to działa w bash na OSX
Yuval