iTerm 2: Jak ustawić skróty klawiaturowe, aby przejść do początku / końca linii?

394

Widzę, że Ctrl+ left/ rightprzeskakuje na początek / koniec linii. Jak zmienić to na Cmd+ left/ right arrow?

Aby uzyskać Alt+ left/ right arrowpoprawne działanie skoków słów, postępuj zgodnie z tym artykułem .

Chris
źródło
1
Jeśli chcesz, aby te skróty działały również w VIM, zapoznaj się z odpowiedzią: stackoverflow.com/a/9611698/991068
Razvan Grigore

Odpowiedzi:

735

Dodaj w iTerm2 następujące klawisze skrótu do profilu

FOR  ACTION         SEND
⌘←  "SEND HEX CODE"      0x01 
⌘→  "SEND HEX CODE"      0x05
⌥←  "SEND ESC SEQ"  b
⌥→  "SEND ESC SEQ"  f

Oto wizualizacja dla tych, którzy jej potrzebują

iTerm dodać klucz wizualny

Matthias
źródło
3
Czy wiesz, jaki jest kod / sekwencja dla Command + Delete? (usuń monit)
Steven Lu
10
Odpowiedziałem na mój pierwszy komentarz gdzie indziej, w zasadzie kod szesnastkowy 0x15 daje Ctrl + U, który usuwa linię. Jednak znajduję 0x01 Ctrl + A, aby zakłócać użycie Tmux. Dlatego zamierzam zamapować go zamiast klawisza Home (ta sama funkcjonalność, co Fn + Left na klawiaturze Maca).
Steven Lu
7
Sekwencja ucieczki dla Home to [1 ~, a sekwencja ucieczki dla End to [4 ~
Steven Lu
3
Działa jak urok, super!
Juto
25
Prawidłowe powiązanie dotyczy opcji ⌘← "SEND ESC SEQ" OHPoczątek i ⌘→ "SEND ESC SEQ" OFKoniec (są to wielkie litery „o nie zera”). To symuluje naciśnięcie klawisza Home i End i jako takie będzie działało w bash, vim itp.
Timothy Zorn
432

Aby przeskakiwać między słowami i początkiem / końcem linii w iTerm2, wybierz jedno z dwóch poniższych rozwiązań.

1. Proste rozwiązanie (zalecane)

  1. Otwórz Preferencje
  2. Kliknij kartę „Profil”
  3. Wybierz profil z listy po lewej stronie (np. „Domyślne”) i kliknij kartę „Klucze”
  4. Kliknij menu „Ustawienia wstępne” i wybierz „Naturalna edycja tekstu”

wprowadź opis zdjęcia tutaj


2. Ręczne mapowanie kluczy (zaawansowane)

Jeśli nie chcesz używać wspomnianego powyżej ustawienia wstępnego „Natural Text Editing”, możesz zmapować potrzebne klucze ręcznie:

  1. Otwórz Preferencje
  2. Kliknij kartę „Klucze”
  3. Kliknij [+]ikonę

Możesz teraz dodać następujące skróty klawiaturowe:

Przesuń kursor o jedno słowo w lewo

  • Skrót klawiaturowy: +
  • Działanie: Wyślij kod szesnastkowy
  • Kod: 0x1b 0x62

wprowadź opis zdjęcia tutaj

Przesuń kursor o jedno słowo w prawo

  • Kombinacja klawiatury: +
  • Działanie: Wyślij kod szesnastkowy
  • Kod: 0x1b 0x66

Przesuń kursor na początek linii

  • Kombinacja klawiatury: +
  • Działanie: Wyślij kod szesnastkowy
  • Kod: 0x01

Przesuń kursor na koniec linii

  • Kombinacja klawiatury: +
  • Działanie: Wyślij kod szesnastkowy
  • Kod: 0x05

Usuń słowo

  • Kombinacja klawiatury: +←Delete
  • Działanie: Wyślij kod szesnastkowy
  • Kod: 0x1b 0x08

Usuń linię

  • Kombinacja klawiatury: +←Delete
  • Działanie: Wyślij kod szesnastkowy
  • Kod: 0x15

Cofnij

  • Kombinacja klawiatury: +z
  • Działanie: Wyślij kod szesnastkowy
  • Kod: 0x1f

Nie zapomnij usunąć poprzednich powiązań :

  • Otwórz zakładkę „Profile”
  • Kliknij podkartę „Klucze”
  • Usuń mapowania dla kombinacji klawiszy + i +
sqren
źródło
2
To działało dla mnie dobrze w iTerm2 i było bardzo łatwe do naśladowania, dzięki!
Natetronn,
3
Tylko wyjaśnienie, co robią oryginalne wiązania ⌥ ←? Widzę to Says send Hex Codes: 0x1b 0x1b 0x5b 0x44. Dobrze byłoby wiedzieć, gdyby ludzie nie chcieli tego usuwać.
sierpień
5
Skok na początek i koniec linii nie działał dla mnie przy użyciu zsh. Używanie „kodu szesnastkowego” „0x01” / „0x05”, jak sugeruje górna odpowiedź, działało dla mnie.
Flip
2
Przeskok na początek i koniec linii też nie działał dla mnie. Najlepsza odpowiedź zadziałała.
hisabimbola
3
Czy iTerm ma sposób na spakowanie ich w gotowe ustawienia, które możemy po prostu załadować? Irytujące jest ręczne wpisywanie, ale zadziałało to dla mnie i było niesamowite. Dzięki Lto!
sierpień
259

Widzę, że jest już wiele dobrych odpowiedzi, ale powinno to zapewnić możliwie najbliższą natywną funkcjonalność OSX w więcej niż tylko powłoce. Sprawdziłem, że działa to w sesjach ZSH, Bash, node, python -i, iex i irb / pry (używając gem rb-readline dla readline, ale powinno działać dla wszystkich).

Otwórz preferencje iTerm + ,i przejdź do Profileskarty ( Keyskarty można używać, ale dodanie skrótu klawiszowego do profilu pozwala zapisać profil i zsynchronizować go z wieloma komputerami) oraz keyspodkartę i wprowadzić następujące dane:

Usuń wszystkie znaki po lewej stronie kursora

+ ←DeleteWyślij kody szesnastkowe:

0x15Bardziej kompatybilny, ale funkcjonalność czasami polega na usunięciu całej linii, a nie tylko znaków po lewej stronie kursora. Ja osobiście tego używam, a następnie nadpisuję mój klawisz powiązania zsh, ^Uaby usunąć tylko rzeczy po lewej stronie kursora (patrz poniżej).

lub

0x18 0x7fMniej kompatybilny, nie działa w węźle i domyślnie nie działa w zsh, patrz poniżej, aby naprawić zsh (bash / irb / pry powinno być w porządku), wykonuje pożądaną funkcjonalność, gdy działa.

Usuń wszystkie znaki z prawej strony kursora

+ fn+ ←Deletelub + Delete→Wyślij kody szesnastkowe:0x0b

Usuń jedno słowo na lewo od kursora

+ ←DeleteWyślij kody szesnastkowe:

0x1b 0x08 Przerwy w IEX Elixira wydają się działać wszędzie

lub

0x17 Działa wszędzie, ale nie kończy się na zwykłych podziałach wyrazów w IRB i zamiast tego usuwa się, dopóki nie zobaczy literalnej spacji.

Usuń jedno słowo na prawo od kursora

+ fn←Deletelub + Delete→Wyślij kody szesnastkowe:0x1b 0x64

Przesuń kursor na początek linii

+ Wyślij kody szesnastkowe:0x01

Przesuń kursor na koniec linii

+ Wyślij kody szesnastkowe:0x05

Przesuń kursor o jedno słowo w lewo

+ Wyślij kody szesnastkowe:0x1b 0x62

Przesuń kursor o jedno słowo w prawo

+ Wyślij kody szesnastkowe:0x1b 0x66

Cofnij

+ zWyślij kody szesnastkowe:0x1f

Ponów zwykle nie jest związany w bash, zsh ani readline, więc możemy ustawić go na nieużywany kod szesnastkowy, który możemy następnie naprawić w zsh

+ + Zlub + yWyślij kody szesnastkowe:0x18 0x1f

Teraz, jak naprawić te, które nie działają

W przypadku Zsh można skonfigurować powiązanie dla jeszcze niefunkcjonalnego + ←Deletei + + Z/ + y, uruchamiając:

# changes hex 0x15 to delete everything to the left of the cursor,
# rather than the whole line
$ echo 'bindkey "^U" backward-kill-line' >> ~/.zshrc

# binds hex 0x18 0x7f with deleting everything to the left of the cursor
$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

# adds redo
$ echo 'bindkey "^X^_" redo' >> ~/.zshrc

# reload your .zshrc for changes to take effect
$ source ~/.zshrc

Nie jestem w stanie znaleźć rozwiązania dla dodawania powtórzeń w bash lub readline, więc jeśli ktoś zna rozwiązanie dla któregokolwiek z nich, proszę o komentarz poniżej, a ja spróbuję je dodać.

Dla każdego, kto szuka tabeli odnośników, w jaki sposób konwertować sekwencje klawiszy na szesnastkę, ta tabela jest bardzo pomocna.

Travis
źródło
2
To jest naprawdę przydatne, robi dużą różnicę! Chciałbym podkreślić, że niektórzy ludzie mogą się pomylić z $przodu echo(po prostu usunąć?). Poza tym jest idealny. Dziękuję Ci.
edmundo,
1
@Christophe Wygląda na to, że kluczowanie jest tam, jak powinno być. Albo popełniłeś błąd, dodając wartości szesnastkowe, albo zastępowane jest słowo kluczowe dla słowa wstecznego. Uruchom, bindkey | grep "\^\[b"a to powie ci, czy coś innego nadpisuje to po ustawieniu. To powinno tylko wrócić #=> "^[b" backward-word. Jeśli jest zastępowany, musisz znaleźć, gdzie jest zastępowany i usunąć go. Jeśli nie jest to możliwe, możesz go uruchomić echo 'bindkey "^[b" backward-word' >> ~/.zshrc, doda go do ostatniego wiersza twojego .zshrc, a następnie uruchom ponownie iTerm i powinno działać
Travis
2
@Christophe sprawdź keyszakładkę w preferencjach iTerm, aby zobaczyć, czy to również mapowanie + do czegoś. Jeśli tak, usuń go. Możesz sprawdzić, czy bdziała poprawnie, szybko naciskając esczwalnianie, a następnie naciskając b. To powinno przeskoczyć słowo w lewo. Alternatywnie możesz zmapować + na hex 0x1b 0x42 lub 0x1b 0x5b 0x31 0x3b 0x35 0x44 . Sprawdziłem, że oba te elementy działają dla mnie. Naprawdę myślę, że + zostałeś nadpisany w iTerm, albo w profile keyszakładce, albo w keyszakładce.
Travis,
3
Niesamowity! Właśnie dowiedziałem się o powiązaniach Cofnij i Ponów z tego miejsca.
ecbrodie
3
Zrobiłem to ręcznie i pomyślałem, dlaczego nie mogę zaimportować profilu, aby to zrobić? Następnie stworzyłem profil dynamiczny GabLeRoux / iterm2-macos-dynamiczny na podstawie tych instrukcji. Działa bezbłędnie, dzięki 🍻
GabLeRoux
48

Postępuj zgodnie z samouczkiem wymienionym powyżej, aby skonfigurować najważniejsze preferencje w iterm2 .

  1. Utwórz nowy klucz skrótu
  2. Wybierz „Wyślij sekwencję ucieczki” jako akcję
  3. Następnie, aby ustawić cmd-left , w poniższym tekście:
    • Wpisz [Hna początek linii
      LUB
    • Wprowadź [Fdo końca linii
Jaime Bellmyer
źródło
1
F przeskakuje tylko jedno słowo w moim iterm2
Matthias
1
ITerm => Preferencje => Klucze
pfrank 24.09.2013
Kocham to! inne rozwiązania nie działały dla mnie. Spędziłem godziny sfrustrowany, że nie mogłem użyć Ctrl + A i Ctrl + E w iterm2. Ale nie chciałem rezygnować z ryb. To całkowicie działa, dziękuję!
LATA
Inne rozwiązania też mi nie działały, ale to zadziałało.
Braham Snyder
42

W iTerm 3.0.12 możesz przełączyć na Natural Text Editingpreset:

wprowadź opis zdjęcia tutaj

iTerm → Preferencje → Profile → Klucze

Ostrzeżenie Ponieważ jest to ustawienie wstępne, może zastąpić klucze, które wcześniej powiązałeś. Dlatego lepiej zapisać bieżące powiązania klawiszy przed zastosowaniem ustawienia wstępnego.

Nik Kov
źródło
2
Czy mógłbyś bardziej rozwinąć swoją odpowiedź? Jak w tym, co ten zestaw zawiera i może zastąpić?
Carles Alcolea,
Dziękuję za odpowiedź. Również brzęczenie jest prawdopodobnie najlepszą praktyką, aby zastosować to do własnego profilu niestandardowego w ten sposób, że nie wkręcasz domyślnych ustawień i możesz przełączać profil jako „tryb” edycji tekstu naturalnego
sierpień
29

W celu szybkiego odniesienia się do każdego, kto chce przejść do końca linii lub początku linii w iTerm2, powyższy link http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- in-iterm.html zauważa, że ​​w iTerm2:

  • Ctrl+ A, przeskakuje na początek linii, podczas gdy
  • Ctrl+ E, przeskakuje na koniec linii.
Ioannis Filippidis
źródło
Dlaczego ta odpowiedź nie jest na górze?
Gangadhar JANNU,
1
@GangadharJannu: Całkowicie się zgadzam. To idzie prosto do ans. Powinien być na górze.
Catbuilts,
10

Użyłem odpowiedzi Travis i stworzyłem profil dynamiczny, który można zaimportować na podstawie jego instrukcji.

GabLeRoux / iterm2-macos-dynamic-profile

Instrukcje znajdują się w pliku Readme, a importowanie tego jest o wiele szybsze niż dodawanie ich ręcznie. Uczyniłem to odpowiedzią na prośbę @ gooli, ponieważ było to ukryte w komentarzu. Mam nadzieję, że ci się spodoba 🍻

GabLeRoux
źródło
2
Wróciłem tu rok później i cieszę się, że to znalazłem!
elifiner
9

Tylko po to, aby pomóc każdemu, kto ma ten sam problem, ale konkretnie używa powłoki Zsh z iTerm 2. Okazuje się, że Zsh nie czyta /etc/inputrcpoprawnie , a więc nie rozumie żadnych powiązań klawiszy skonfigurowanych w preferencjach!

Aby to naprawić, musisz dodać kilka powiązań klawiszy do .zshrcpliku, takich jak:

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line

Zwróć uwagę na odwrotne ukośniki w powyższym przykładzie przed „e”, w połączonym artykule nie ma ich, więc dodaj je do .zshrcpliku podczas dodawania powiązań.

Nerdwood
źródło
4

Powiązania emacs starej mody mogą nadal działać w terminalu iterm2 i os x:

Preferencje -> Profile -> Klucze (zakładka w profilach)

  • Zestaw Left/Right option <kbd>⌥</kbd> key acts as +Esc(podobny w terminalu OS X)

To powinno umożliwić alt- fi alt- bprzenoszenie słów po słowach. (Nadal ctrl- ai ctrl- ezawsze działa jak zwykle)

Jeśli ustawione jako metate stare powiązania będą działać, podczas gdy niektóre powiązania iterm2 będą niedostępne.

półelf
źródło
2

Jak wyjaśniono tutaj , możesz to zrobić za pomocą prostych kroków:

Domyślnie skoki słów (opcja + → lub ←) i usuwanie słów (opcja + backspace) nie działają. Aby je włączyć, przejdź do „iTerm → Preferencje → Profile → Klucze → Załaduj ustawienie wstępne ... → Edycja tekstu naturalnego → Boom! Głowa eksploduje”

Islam.Ibrahim
źródło
2

Jedyne, co działa w przypadku przejścia na początek i koniec linii, to

⌘← "SEND ESC SEQ" OH- aby przejść na początek linii
⌘→ "SEND ESC SEQ" OF- aby przejść na koniec linii

add787
źródło
1

bind -p pokaże listę powiązanych klawiszy ucieczki w twojej powłoce, co może pomóc ci dać więcej pomysłów / wyszukiwanych terminów.

Jose Alban
źródło
5
bind -pdziała tylko w powłokach Bourne'a (bash, sh) dla zsh, csh tcsh, use bindkey.
Travis,
0

Dla mnie zadziałała następująca kombinacja:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

Halil Özgür
źródło