Jak sprawić, aby ⌘ ← i ⌘ → działały dla kombinacji home / end dla terminala?

21

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?

Jackie
źródło

Odpowiedzi:

21

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ą CtrlAiCtrlE
  • viwykorzystuje 0i $/Shift4

Inne 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 Optioni Optionktóry zachowuje się bashtak, 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 bashsekcja „Polecenia dla Moving”, aby uzyskać więcej informacji). Na viprzykład działa tylko ten ostatni (rodzaj) (na końcu tej odpowiedzi pokażę, jak skonfigurować vipracę z Optioni 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ć, viaby honorować CtrlAi CtrlE(co w rezultacie zapewni vizgodność z i ).

Mapa oraz do CtrlAiCtrlE

  1. W Terminalu wybierz Preferencje ...> Ustawienia> [Twój aktywny profil]> Klawiatura: wprowadź opis zdjęcia tutaj

  2. Naciśnij +, wybierz „Kursor w lewo”, „Control-Shift” jako modyfikator i akcję „Wyślij tekst:”. Następnie naciśnij CtrlA( \001pojawi się w polu tekstowym) i potwierdź OK: wprowadź opis zdjęcia tutaj

    (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.)

  3. Teraz dodaj kombinację klawiszy dla „Kursora w prawo”, ale naciśnij CtrlE( \005pojawi się w polu tekstowym). Potwierdź za pomocą OK.

  4. Otwórz Automator (na przykład naciśnij, spaceaby uruchomić Spotlight i wpisz Automator ), wybierz Plik> Nowy i wybierz Service:

    wprowadź opis zdjęcia tutaj

  5. Przeciągnij Run AppleScriptdo prawego panelu: wprowadź opis zdjęcia tutaj

  6. 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:

    wprowadź opis zdjęcia tutaj

  7. 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:

    wprowadź opis zdjęcia tutaj

  8. Tak teraz wygląda Terminal> Usługi:

    wprowadź opis zdjęcia tutaj

Skonfiguruj, viaby honorować CtrlAiCtrlE

  1. Otwórz .bashrcw 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 mappolecenia nakazują viminterpretować ControlEoraz ControlAjako $i 0, które przesuwają kursor odpowiednio na początek lub koniec linii.

    Ostatnie dwa mappolecenia każą vimprzesuwać kursor o jedno słowo na raz, jak można się spodziewać po naciśnięciu optioni 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)

jaume
źródło
3
Dzięki za szczegółową odpowiedź, czy jest petycja, aby Apple umieściło przycisk Home / End przy kolejnym przeprojektowaniu :-)
Jackie
Cieszę się że mogłem pomóc.
jaume 12.12. O
Wow .. wszystko po to, żeby uzyskać
dziwny
To dobra odpowiedź, ale można ją poprawić, wykluczając wszystkie dodatkowe informacje, o viktórych jest zupełnie inna aplikacja niż terminal.
axiopisty
1
To świetna sztuczka. Udało mi się również uruchomić skrypt AppleScript, wysyłając kody klawiszy „Home” i „End”: „kod klucza 115” i „kod klucza 119” ”
Keymon
2

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.

George Katsanos
źródło