Dlaczego fn- ⇧- →(lub inne) robi home / end w Terminalu, a a ⌘- →działa wszędzie indziej?
Żeby było jasne, pytanie brzmi: jak sprawić, by Terminal zabrał Command+ ←i →do domu i do końca?
Tak wygodne, jak by to było, Terminal nie może łatwo zapewnić żądanej funkcjonalności.
Powodem jest to, że programy działające w Terminalu mają różne reguły przenoszenia kursora na początek / koniec linii, na przykład:
bash
(i inne powłoki) używają CtrlAiCtrlEvi
wykorzystuje 0i $/Shift4Inne programy mogą używać innych klawiszy. Nie ma uniwersalnej kombinacji klawiszy do pozycjonowania kursora na początku / końcu linii.
Oczywiście Terminal może utrzymywać listę kombinacji klawiszy dla wielu popularnych programów, sprawdzać, co działa i wysyłać odpowiednie klucze, lub może zapewniać pozycję menu, taką jak Przenieś kursor do początku linii wewnątrz powłoki ⌘ ←, a następnie wyślij CtrlAza kulisami. Ale myślę, że inżynierowie Apple myśleli, że jeśli zapuścisz się na terytorium CLI , znasz jego osobliwości.
Na marginesie, Terminal zapewnia Option←i Option→który zachowuje się bash
tak, jak można się spodziewać, i przesuwa kursor na początek poprzedniego / następnego słowa. To dlatego, że te kombinacje klawiszy są odwzorowane na Escba Escb(patrz man bash
sekcja „Polecenia dla Moving”, aby uzyskać więcej informacji). Na vi
przykład działa tylko ten ostatni (rodzaj) (na końcu tej odpowiedzi pokażę, jak skonfigurować vi
pracę z Option←i Option→).
Ale dzięki Automatorowi, AppleScript i aliasom bash możesz uzyskać ⌘←i ⌘→pracować z bash
(i ewentualnie innymi powłokami) i vi
.
Pierwszym krokiem jest zmapowanie ⌘←i ⌘→do CtrlAi CtrlE. W drugim kroku pokażę, jak skonfigurować, vi
aby honorować CtrlAi CtrlE(co w rezultacie zapewni vi
zgodność z ⌘←i ⌘→).
Mapa ⌘←oraz ⌘→do CtrlAiCtrlE
W Terminalu wybierz Preferencje ...> Ustawienia> [Twój aktywny profil]> Klawiatura:
Naciśnij +, wybierz „Kursor w lewo”, „Control-Shift” jako modyfikator i akcję „Wyślij tekst:”. Następnie naciśnij CtrlA( \001
pojawi się w polu tekstowym) i potwierdź OK:
(W poprzedniej wersji tej odpowiedzi użyłem „Shift” jako modyfikatora. Zauważyłem, że to ustawienie jest w konflikcie ⌘shift←, co pokazuje poprzednią kartę Terminal, jeśli nie puścisz od ⌘razu. Używając „Control-Shift” naprawia to.)
Teraz dodaj kombinację klawiszy dla „Kursora w prawo”, ale naciśnij CtrlE( \005
pojawi się w polu tekstowym). Potwierdź za pomocą OK.
Otwórz Automator (na przykład naciśnij, ⌘spaceaby uruchomić Spotlight i wpisz Automator ), wybierz Plik> Nowy i wybierz Service
:
Przeciągnij Run AppleScript
do prawego panelu:
Wpisz następujący skrypt:
on run {input, parameters}
tell application "System Events"
tell application process "Terminal"
key code 123 using {shift down, control down}
end tell
end tell
end run
i zapisz jako Move Cursor to Beginning of Line
:
Powtórz kroki od 4. do 6. z tym skryptem:
on run {input, parameters}
tell application "System Events"
tell application process "Terminal"
key code 124 using {shift down, control down}
end tell
end tell
end run
i zapisz jako Move Cursor to End of Line
:
Tak teraz wygląda Terminal> Usługi:
Skonfiguruj, vi
aby honorować CtrlAiCtrlE
Otwórz .bashrc
w swoim ulubionym edytorze i dodaj ten wiersz:
alias vi='vim -c "map <C-A> 0" -c "map <C-E> $" -c "map <Esc>b B" -c "map <Esc>f E"'
Pierwsze dwa map
polecenia nakazują vim
interpretować ControlEoraz ControlAjako $i 0, które przesuwają kursor odpowiednio na początek lub koniec linii.
Ostatnie dwa map
polecenia każą vim
przesuwać kursor o jedno słowo na raz, jak można się spodziewać po naciśnięciu option←i Option→.
Ostrzeżenia
Zauważysz, że istnieje krótkie opóźnienie między momentem naciśnięcia ⌘←lub ⌘→momentem, w którym kursor faktycznie się porusza.
Pamiętaj, że będzie działać tylko dla programów, które honorują CtrlA/ CtrlE, więc możesz chcieć nauczyć się konkretnych kombinacji klawiszy każdego programu używanego w Terminalu.
(Testowane na macOS Sierra 10.12.4)
⌘
vi
których jest zupełnie inna aplikacja niż terminal.Oczywiście, że to możliwe.
Przede wszystkim możesz skorzystać z bezpłatnego narzędzia „DoubleCommand”, jeśli masz klawiaturę Windows z klawiszami HOME / END, aby zachowywać się tak, jak powinny (początek / koniec linii).
Po drugie, w szczególności w terminalu, przejdź do preferencji Klawiatura, edytuj ikonę / klawisz, który wygląda jak strzałka skierowana w górę w lewo, wybierz „wyślij tekst” i wpisz ctrl + a. Gotowy!
To samo dotyczy przycisku zakończenia.
Jeśli nie masz klawiatury komputera, możesz zrobić to samo z innymi kombinacjami klawiszy.
źródło