Przypisz „Dom” i „Koniec” do początku i końca linii

326

Większość mojego czasu spędzam na komputerze (sporadycznie w systemie Windows). Na tych platformach klawisze Homei Enduniwersalnie przeskakują na początek lub koniec bieżącej linii.

Stopniowo przyzwyczajam się do korzystania z jednego komputera Apple w moim życiu, ale wciąż jest to frustrujące, ponieważ te klucze wydają się być związane z początkiem i końcem dokumentu i wydaje się, że nie ma żadnego klucza dla linii działania oparte na

Moje pytanie:

  1. Czy istnieją jakieś skróty klawiszowe, których brakuje mi na początku i na końcu linii? (Najczęściej używam terminala, Chrome i LibreOffice)
  2. Czy istnieje sposób na ponowne powiązanie funkcji tych klawiszy z funkcjami, które znam? Jestem gotów zrezygnować z wersji opartych na dokumentach, które wydają mi się mało przydatne.

Również dwa zastrzeżenia:

  1. Nie jestem jedynym użytkownikiem w systemie. Byłoby miło, gdyby moje ustawienia użytkownika nie uszkodziły doświadczeń innych ludzi. Jeśli nie jest to możliwe, myślę, że mam najsilniejsze preferencje!
  2. Używam wielu języków i przełączam się między układami klawiatury, więc wszelkie rozwiązania powinny działać, nawet przy przełączaniu między wieloma układami klawiatury.
Caleb
źródło
Pamiętaj, że chociaż znalazłem rozwiązanie i odpowiadałem na własne pytanie, jestem otwarty na łatwiejsze lub bardziej wszechstronne rozwiązania. Również proces odkrywania tego nie jest jasny. Na przykład, gdzie znajdują się kody kluczy i nazwy akcji, gdybym chciał ponownie przypisać więcej kluczy? Jeśli masz odpowiednią wiedzę, możesz dodawać odpowiedzi!
Caleb

Odpowiedzi:

304

Domyślne skróty do przejścia do początku lub końca (zawiniętych) linii to i . i lub Ai Eprzejdź do początku lub końca nieopakowanych linii (lub akapitów). i przechodź do tyłu / do przodu słowami, a wszystkie z nich są zgodne z przytrzymywaniem, Shiftaby wybrać podczas odpowiednich ruchów.

Możesz zmienić mapę domu i zakończyć, tworząc ~/Library/KeyBindings/i zapisując listę nieruchomości w następujący sposób DefaultKeyBinding.dict:

{
    "\UF729"  = moveToBeginningOfLine:; // home
    "\UF72B"  = moveToEndOfLine:; // end
    "$\UF729" = moveToBeginningOfLineAndModifySelection:; // shift-home
    "$\UF72B" = moveToEndOfLineAndModifySelection:; // shift-end
}

Większość skrótów klawiszowych do edycji tekstu w OS X jest zdefiniowana w /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict.

Zastosowanie zmian wymaga ponownego otwarcia aplikacji. DefaultKeyBinding.dict jest ignorowany przez niektóre starsze wersje Xcode (działa z najnowszą wersją 6.3.1), Terminal i wiele aplikacji wieloplatformowych.

Zobacz Cocoa Text System i moją stronę internetową, aby uzyskać więcej informacji na temat konfigurowalnych skrótów klawiszowych.

Skróty klawiszowe terminala można dostosować w Preferencje> Ustawienia> Klawiatura. \033OHprzesuwa się na początek linii i \033OFna koniec linii.

W Eclipse powiązania klawiszy należy modyfikować w Preferencje> Ogólne> Klucze. Musisz zmodyfikować domyślne wiązania dla poleceń Początek linii i Koniec linii (zamień ⌘ ← na ↖ i ⌘ → na ↘). Aby wybór działał, zmodyfikuj także opcję Wybierz początek linii i Wybierz koniec linii .

PS: Może być konieczne wylogowanie i ponowne zalogowanie, aby ~/Library/KeyBindings/DefaultKeyBinding.dictzmiana zaczęła obowiązywać.

Lri
źródło
1
Przydatne informacje o kluczowych mapowaniach - korzystałem z nich w (komercyjnym) BetterTouchTool, zobacz tę odpowiedź .
RichVel,
3
Z mojego doświadczenia nie działa to w większości aplikacji. Lepiej jest używać Karabina-Elements.
Timmmm,
3
Jest to świetne, ponieważ działa w terminalach, iTerm2, Chrome, Sublime i Outlook. Alternatywa (Karabina) jest mniej dobra, ponieważ mapuje „Dom” na Command + LeftArrow, który faktycznie przełącza okna w Terminalu. Musisz pamiętać o ponownym uruchomieniu wszystkich aplikacji po zapisaniu pliku .dict.
Czy Sheppard
1
To nie działa z
vimem
2
To ustawienie działa dla mnie w systemie Mac OS Mojave z podłączoną klawiaturą zewnętrzną.
jdhao
106

Obecnie korzystam z Lion 10.7.4 iz jakiegoś dziwnego powodu edycja ~/Library/KeyBindings/DefaultKeyBinding.dictnie działała dla mnie.

Przekonałem się, że dodatek Preferencje systemowe KeyRemap4MacBook (który nazywa się teraz Karabiner ) działa naprawdę dobrze, a także można z nim mapować różne klucze bez konieczności edytowania plików tekstowych. Np. Zmiana klawiszy strona w górę / strona w dół, aby kursor podążał również za stroną w górę / w dół.

Wystarczy pobrać dodatek, a następnie w panelu Preferencji systemowych przejdź do For PC Userssekcji i sprawdź Use PC Style Home /End.

Zauważ, że wybrałem (Change Home to Command+Left)zamiast (Change Home to Control+A), tak jak gdybym wybrał pierwszy, a jeśli linia zostanie owinięta, dom zabierze mnie na początek owiniętej linii, kilka linii powyżej, zamiast zabrać mnie na początek bieżącej linii.

KeyRemap4MacBook

jklp
źródło
9
Karabiner jest świetny, a także open source
Jedidja
2
W wersji 10.10.5 inne sugestie wydają się nie działać, ale Karabiner (nowa nazwa KeyRemap4MacBook - działa na wszystkich produktach Mac) działa dobrze i nie wymaga ponownego uruchomienia, aby zmiany zostały wprowadzone. Niezwykle pomocny dla tego Maca Mac; mam nadzieję, że inni również skorzystają.
Ralph J
1
Na dzień dzisiejszy „Karabiner nie działa obecnie w systemie macOS Sierra”.
james.garriss
2
@ james.garriss Daj Karabiner-Elements wyprawie - ten sam autor, choć przepisany od podstaw, aby wesprzeć Sierra (jest wciąż w fazie rozwoju, więc są dość szorstcy
jklp
5
@jklp Niestety funkcja niezbędna do ponownego mapowania klawiszy Home i End na rozszerzonej klawiaturze Apple nie jest jeszcze dostępna w Karabiner Elements. Osobiście wydaje mi się, że mam pamięć mięśni Ctrl-a, Ctrl-e podczas pracy w konsoli, ale podczas pracy w aplikacji GUI, takiej jak Sublime, bardzo trudno jest zapamiętać. W przypadku Sublime (konkretnie) istnieje jednak rozwiązanie: coderwall.com/p/upolqw/…
Ville
43

Dzięki temu artykułowi dowiedziałem się, jak ponownie powiązać klawisze Homei Endz działaniami opartymi na wierszach w zależności od użytkownika, który działa w różnych układach klawiatury.

Musisz utworzyć plik słownika z kodami klawiszy i nowymi poleceniami do mapowania, ale najpierw upewnij się, że folder, w którym zostanie on umieszczony, istnieje, otwierając Terminal i uruchamiając:

$ mkdir -p ~/Library/KeyBindings

Następnie utwórz lub edytuj plik w ~/Library/KeyBindings/DefaultKeyBinding.dict. Jeśli wcześniej nie istniał, dodaj całą sekcję poniżej. Jeśli tak, po prostu dodaj cztery nowe wiersze w bloku.

{
    "\UF729"  = "moveToBeginningOfLine:";
    "\UF72B"  = "moveToEndOfLine:";
    "$\UF729" = "moveToBeginningOfLineAndModifySelection:";
    "$\UF72B" = "moveToEndOfLineAndModifySelection:";
}

Aby aktywować ustawienia, musisz się wylogować i ponownie zalogować.

Zauważ, że dotyczy to zarówno normalnej akcji przesuwania kursora, jak i kombinacji Shift+ Home/ w Endcelu wybrania podczas ruchu kursora.

Caleb
źródło
12

Używam OS X Sierra, a ~/Library/KeyBindings/DefaultKeyBinding.dictrozwiązanie sugerowane przez innych użytkowników częściowo zadziałało: niektóre aplikacje, takie jak TextEdit, mają teraz pożądane zachowanie, ale inne aplikacje nie. Google Chrome i Slack to dwa, które wydają się nie szanować DefaultKeyBinding.dictpliku.

Aby naprawić pozostałe aplikacje, użyłem BetterTouchTool do utworzenia specyficznych dla aplikacji skrótów klawiaturowych Homeoraz Enddo rodzimych skrótów OS X Ctrl+Ai Ctrl+E. BetterTouchTool nie jest darmowy, ale obowiązuje 45-dniowy okres próbny.

Aby to zrobić:

  1. Zainstaluj i uruchom BetterTouchTool
  2. Przejdź do karty Gesty> Klawiatura
  3. W obszarze „Wybierz aplikację” kliknij +i wybierz aplikację, którą chcesz naprawić.
  4. Kliknij „Dodaj nowy skrót”, przypisz Homeklawisz w polu „skrót do rekordu” i ustaw „Wyzwalaj inny skrót klawiaturowy” na Ctrl + A. Powtórz dla Endi Ctrl + E.
  5. Po zakończeniu panel powinien wyglądać następująco:Panel BetterTouchTool
  6. W Ustawieniach zaawansowanych BetterTouchTool zezwól na uruchomienie go podczas uruchamiania.

Uwaga: nie zamykaj aplikacji BetterTouchTool, ponieważ przestanie ona przechwytywać naciśnięcia klawiszy. Wystarczy zamknąć okno, aby kontynuować pracę w tle.

mamacdon
źródło
Dzięki - właśnie użyłem tego na El Capitan, ponieważ już zapłaciłem za BetterTouchTool, i działa dobrze z Chrome, Slack i innymi aplikacjami.
RichVel,
9

Używam niesamowitego KeyRemap4MacBook z niestandardowymi ustawieniami poniżej.

Naprawia Home / End w większości aplikacji i nie psuje iTerm2.

Od https://gist.github.com/lhotari/6134223181439b9ed0a1

<?xml version="1.0"?>
<!-- ~/Library/Application Support/KeyRemap4MacBook/private.xml -->
<!-- Custom keyboard mappings for MBP using https://pqrs.org/macosx/keyremap4macbook/ -->
<root>
    <item>
        <name>Lari's PC Style Home/End</name>
        <appendix>(Change Home to Command+Left)</appendix>
        <appendix>(Change End to Command+Right)</appendix>
        <appendix></appendix>
        <appendix>{{ PC_STYLE_BINDINGS_IGNORE_APPS_DESCRIPTION }}</appendix>
        <identifier>lari.remap.pclikehomeend</identifier>
        <block>
            <only>DREAMWEAVER</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::HOME, ModifierFlag::SHIFT_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::END,  ModifierFlag::SHIFT_L</autogen>
        </block>
        <block>
            <only>BLUEFISH,WORD,EXCEL,POWERPOINT</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::HOME</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::END</autogen>
        </block>
        <!--
        <block>
            <only>EMACS, TERMINAL, X11, ECLIPSE</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::A, ModifierFlag::CONTROL_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::E, ModifierFlag::CONTROL_L</autogen>
        </block>
         -->
        <block>
            <not>{{ PC_STYLE_BINDINGS_IGNORE_APPS }}</not>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND, KeyCode::CURSOR_UP,    ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL, KeyCode::CURSOR_UP,    ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND, KeyCode::CURSOR_DOWN,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL, KeyCode::CURSOR_DOWN,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME,             KeyCode::CURSOR_LEFT,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,              KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L</autogen>
        </block>
    </item>
</root>
Lari Hotari
źródło
Nie został zaktualizowany do pracy z Sierra, na powyższy link.
james.garriss
To narzędzie zostało przemianowane na Karabiner i najwyraźniej działa z OS X El Capitan 10.11, Sierra 10.12 i High Sierra 10.13.
RichVel,
7

Znalazłem następujące przydatne dla iterm2i zshz cytatami z tego miejsca :

Otwarte iTerm > Preference. Idź do profiles tab > Keys. Następnie kliknij +przycisk na dole listy klawiszy, naciśnij Home(lub Fn+left arrowna bezprzewodowej klawiaturze Apple), w obszarze Actionwybierz Send Escape Sequence, a następnie wpisz[1~

Powtórz dla Endklawisza z [~4sekwencją klawiszy Escape.

Jeśli używasz zsh, również wykonaj następujące czynności:

1) Umieść następujące elementy w swoim ~/.zshrcpliku

bindkey "^[[1~" beginning-of-line
bindkey "^[[4~" end-of-line

2) Uruchom source ~/.zshrcw dowolnych otwartych terminalach.

RationalDev
źródło
iTerm2 ma również predefiniowane ustawienie mapowania klawiszy „Naturalna edycja tekstu”, które obejmuje takie zachowanie.
Matt M.
Należy zmienić na bindkey "^[[~4" end-of-line. Zwróć uwagę na pozycję 4.
Ty.
@Ty Dzięki, ale czy możesz wyjaśnić, dlaczego? Oryginalne źródło, a także github.com/reenhanced/zsh-config/blob/master/lib/… i github.com/ThiefMaster/zsh-config/blob/master/zshrc.d/… użyj „^ [[4 ~ "
RationalDev,
Nie jestem dobrze zaznajomiony z tymi sekwencjami ucieczki, ale dla mnie ^[[4~echo, 4gdy ^[[~4przesuwa kursor na koniec linii.
Ty.
@Ty Interesujące. Próbowałem dowiedzieć się, dlaczego, ale udało mi się znaleźć tylko przykłady ^[[4~. Jakiego rodzaju klawiatury i kodowania znaków używasz, może to robi różnicę?
RationalDev,
5

Osiągnąłem to za pomocą Karabiner Elements .

Musisz zaktualizować sekcję reguł o ~/.config/karabiner/karabiner.jsontablicę JSON z kodu poniżej. Powoduje to ponowne mapowanie klawiszy home i end, aby działały tak, jak działają na PC / Windows.

{
  "rules": [
    {
      "description": "change home key to command + left_arrow",
      "manipulators": [
        {
          "from": {
            "key_code": "home"
          },
          "to": [
            {
              "key_code": "left_arrow",
              "modifiers": [
                "left_command"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change home key to command + left_arrow while presing shift (selection)",
      "manipulators": [
        {
          "from": {
            "key_code": "home",
            "modifiers": {
              "mandatory": [
                "left_shift"
              ]
            }
          },
          "to": [
            {
              "key_code": "left_arrow",
              "modifiers": [
                "left_command",
                "left_shift"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change end key to command + right_arrow",
      "manipulators": [
        {
          "from": {
            "key_code": "end"
          },
          "to": [
            {
              "key_code": "right_arrow",
              "modifiers": [
                "left_command"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change end key to command + right_arrow while presing shift (selection)",
      "manipulators": [
        {
          "from": {
            "key_code": "end",
            "modifiers": {
              "mandatory": [
                "left_shift"
              ]
            }
          },
          "to": [
            {
              "key_code": "right_arrow",
              "modifiers": [
                "left_command",
                "left_shift"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    }
  ]
}

patrz także: github gist

wprowadź opis zdjęcia tutaj

Jason Waters
źródło
1

Odpowiedź Lri jest niesamowita ( dziękuję bardzo; doprowadzało mnie to do szaleństwa ), ale ostatecznie trochę ją zmodyfikowałem.

(W tej odpowiedzi używam nieprzydatnych nazw dla klawiszy, więc polecenie = super i opcja = alt.)

Super-lewa i super-prawa kiedyś były faktycznie mapowane na moveToLeftEndOfLinei moveToRightEndOfLine. Używanie moveToBeginningOfLinei moveToEndOfLine, podobnie jak @Lri, może powodować niespójne zachowanie.

Istnieje wiele innych różnic między skrótami appley i dosłownie skrótami wszystkich innych, które dodałem. Na przykład, ctrl-lewy i ctrl-prawny powinny poruszać się między słowami; nie alt-left i alt-right. Nie sądzę, żeby to było wyczerpujące, ale teraz działa dla mnie całkiem dobrze. Zakładałem, że użytkownik zamienił już klawisze Control i Super, aby naprawić wycinanie, kopiowanie i wklejanie.

~/Library/KeyBindings/DefaultKeyBinding.dict:
{
    "\UF729"   = moveToLeftEndOfLine:; // home
    "\UF72B"   = moveToRightEndOfLine:; // end
    "$\UF729"  = moveToBeginningOfLineAndModifySelection:; // shift-home
    "$\UF72B"  = moveToEndOfLineAndModifySelection:; // shift-end

    "@\UF700"  = moveUp:;  //super-up
    "@\UF701"  = moveDown:;  //super-down
    "@\UF702"  = moveWordLeft:;  //super-left
    "@\UF703"  = moveWordRight:;  //super-right

    "@$\UF700" = moveUpAndModifySelection:;  // super-shift-up
    "@$\UF701" = moveDownAndModifySelection:;  // super-shift-down
    "@$\UF702" = moveWordLeftAndModifySelection:;  // super-shift-left
    "@$\UF703" = moveWordRightAndModifySelection:;  // super-shift-right

    "@\UF728"  = deleteWordForward:;  // super-delete
    "@\U7F"    = deleteWordBackward:;  // super-backspace
}
Eric Toombs
źródło
-3

Możesz także ponownie mapować klawisze klawiatury, a także dostosowywać mysz i gładzik na wiele fajnych sposobów, korzystając z bezpłatnego BetterTouchTool, dostępnego na stronie http://blog.boastr.net/ . Doskonałe rozwiązanie do dostosowywania działania urządzeń wejściowych!

Gary Coker
źródło
2
Mógłbyś rozwinąć swoją odpowiedź z instrukcjami , jak używać określonego oprogramowania, aby rozwiązać oryginalny problem?
grg
Nie za darmo w sensie „Free Beer” lub „Freedom”. 45-dniowa wersja próbna, zamknięte oprogramowanie płatne.
Wyatt8740,