Rimappa "Home" e "End" all'inizio e alla fine della riga


326

Gran parte del mio tempo di elaborazione viene impiegato in Linux (con tempo occasionale in Windows). Su queste piattaforme i tasti Homee Endsaltano universalmente all'inizio o alla fine della riga corrente.

Mi sto gradualmente abituando ad usare l'unico computer Apple nella mia vita, ma è ancora frustrante che questi tasti sembrano essere legati all'inizio e alla fine del documento e non sembra esserci alcuna chiave per la linea azioni basate.

La mia domanda:

  1. Ci sono combinazioni di tasti esistenti che mi mancano per l'inizio e la fine della riga? (Uso principalmente un terminale, Chrome e LibreOffice)
  2. C'è un modo per ricollegare le funzioni di questi tasti alle funzioni che ho familiarità? Sono disposto a rinunciare alle versioni basate su documenti che mi sembrano poco utili.

Anche due avvertenze:

  1. Non sono l'unico utente sul sistema. Sarebbe bello se le mie impostazioni utente non interrompessero l'esperienza di altre persone. Se ciò non è possibile, penso di avere probabilmente la preferenza più forte!
  2. Uso più lingue e passo tra i layout di tastiera, quindi ci si aspetterebbe che qualsiasi soluzione funzioni anche quando si passa da un layout di tastiera all'altro.

1
Nota che mentre ho finito per trovare una soluzione e rispondere alla mia domanda, sono aperto a soluzioni più semplici o più versatili. Anche il processo di scoperta di questo non è chiaro. Ad esempio, dove trovo i codici chiave e i nomi delle azioni se volessi rimappare più chiavi? Sentiti libero di aggiungere risposte se hai conoscenze pertinenti!
Caleb,

Risposte:


304

Le scorciatoie predefinite per passare all'inizio o alla fine delle linee (avvolte) sono e . e o Ae Espostarsi all'inizio o alla fine di scartare linee (o paragrafi). e muoviti indietro / avanti di parole, e tutti questi sono compatibili con la tenuta Shiftper selezionare durante le mosse corrispondenti.

Puoi rimappare a casa e terminare creando ~/Library/KeyBindings/e salvando un elenco di proprietà come questo come DefaultKeyBinding.dict:

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

La maggior parte delle combinazioni di tasti per la modifica del testo in OS X sono definite in /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict.

L'applicazione delle modifiche richiede la riapertura delle applicazioni. DefaultKeyBinding.dict è ignorato da alcune vecchie versioni di Xcode (funziona con l'ultima versione 6.3.1), Terminale e molte applicazioni multipiattaforma.

Vedere Cocoa Text System e il mio sito Web per ulteriori informazioni sui tasti personalizzabili.

Le combinazioni di tasti del terminale possono essere personalizzate in Preferenze> Impostazioni> Tastiera. \033OHsi sposta all'inizio di una riga e \033OFalla fine di una riga.

In Eclipse, i collegamenti dei tasti devono essere modificati in Preferenze> Generali> Chiavi. È necessario modificare i collegamenti predefiniti per i comandi Inizio linea e Fine linea (sostituire ⌘ ← con ↖ e ⌘ → con ↘). Affinché la selezione funzioni, modificare anche Seleziona inizio linea e Seleziona fine linea .

PS: potrebbe essere necessario disconnettersi e accedere nuovamente per ~/Library/KeyBindings/DefaultKeyBinding.dictrendere effettive le modifiche.


1
Informazioni utili sui mapping dei tasti: li ho usati con il (commerciale) BetterTouchTool, vedi questa risposta .
RichVel,

3
Questo non funziona nella maggior parte delle applicazioni nella mia esperienza. È meglio usare Karabina-Elements.
Timmmm,

3
Questo è fantastico perché funziona in Terminal, iTerm2, Chrome, Sublime e Outlook. L'alternativa (Karabina) è meno buona perché associa "Home" a Command + LeftArrow, che in realtà cambia Windows in Terminal. È necessario ricordare di riavviare tutte le app dopo aver salvato il file .dict.
Will Sheppard,

1
Questo non funziona con vim
MohitC

2
Questa impostazione funziona per me su Mac OS Mojave con tastiera esterna collegata.
jdhao,

106

Sono attualmente su Lion 10.7.4, e per qualche strana ragione l'editing ~/Library/KeyBindings/DefaultKeyBinding.dictnon ha funzionato per me.

Ho scoperto che il componente aggiuntivo Preferenze di sistema di KeyRemap4MacBook (che ora si chiama Karabiner ) funziona davvero bene e puoi anche mappare nuovamente una varietà di chiavi con esso, senza dover modificare alcun file di testo. Ad esempio, cambiando i tasti pagina su / pagina giù in modo che il cursore segua anche sulla pagina su / giù.

Basta scaricare il componente aggiuntivo e, nel pannello Preferenze di Sistema, accedere alla For PC Userssezione e controllare Use PC Style Home /End.

Nota, ho scelto (Change Home to Command+Left)invece di (Change Home to Control+A), come se avessi scelto il primo, e se la linea fosse stata avvolta, home mi avrebbe portato all'inizio della linea avvolta, diverse righe sopra, invece di portarmi all'inizio della linea corrente.

KeyRemap4MacBook


9
Karabiner è fantastico e anche open source
Jedidja

2
Con 10.10.5, gli altri suggerimenti sembrano non funzionare, ma Karabiner (il nuovo nome di KeyRemap4MacBook - funziona su tutti i prodotti Mac) funziona bene e non ha bisogno di un riavvio per rendere effettive le modifiche. Immensamente utile per questo Mac Noob; speriamo che anche altri possano trarne beneficio.
Ralph J,

1
Ad oggi, "Karabiner non funziona su macOS Sierra al momento".
james.garriss,

2
@ james.garriss Dai un'occhiata a Karabiner-Elements - lo stesso autore è stato riscritto da zero per supportare Sierra (è ancora in fase di sviluppo, quindi sono abbastanza spigolosi) - github.com/tekezo/Karabiner-Elements
jklp

5
@jklp Sfortunatamente la funzionalità necessaria per rimappare i tasti Home ed End sulla tastiera estesa Apple non è ancora disponibile in Karabiner Elements. Personalmente sembra avere la memoria muscolare per Ctrl-a, Ctrl-e quando si lavora nella console, ma quando si lavora in un'app GUI come Sublime, è super difficile da ricordare. Per Sublime (in particolare) esiste una soluzione, tuttavia: coderwall.com/p/upolqw/…
Ville

43

Grazie a questo articolo , ho capito come ricollegare i tasti Homee Endper allineare le azioni basate su una base per utente che funziona su tutti i layout di tastiera.

È necessario creare un file di dizionario con i codici chiave e i nuovi comandi su cui eseguire il mapping, ma assicurarsi innanzitutto che la cartella in cui verrà posizionato esista aprendo un Terminale ed eseguendo:

$ mkdir -p ~/Library/KeyBindings

Quindi creare o modificare il file in ~/Library/KeyBindings/DefaultKeyBinding.dict. Se non esisteva prima, aggiungi l'intera sezione in basso. Se esiste, aggiungi semplicemente le quattro nuove righe all'interno del blocco.

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

Per attivare le impostazioni dovrai disconnetterti dal tuo utente e accedere di nuovo.

Si noti che ciò copre sia la normale azione di spostamento del cursore sia la combinazione Shift+ Home/ Endper selezionare durante il movimento del cursore.


12

Sto usando OS X Sierra e la ~/Library/KeyBindings/DefaultKeyBinding.dictsoluzione suggerita da altri utenti ha funzionato parzialmente: alcune app come TextEdit ora hanno il comportamento desiderato, ma altre app no. Google Chrome e Slack sono due che non sembrano rispettare il DefaultKeyBinding.dictfile.

Per fissare le applicazioni rimanenti, ho usato BetterTouchTool per creare scorciatoie da tastiera specifiche app di legame Homee Enddi OS X di tasti di scelta rapida nativo Ctrl+Ae Ctrl+E. BetterTouchTool non è gratuito, ma c'è un periodo di prova di 45 giorni.

Per farlo:

  1. Installa e avvia BetterTouchTool
  2. Vai alla scheda Gesti> Tastiera
  3. In "Seleziona applicazione", fai clic su +e scegli l'app che desideri correggere.
  4. Fai clic su "Aggiungi nuova scorciatoia", assegna il Hometasto nel campo "registra scorciatoia" e imposta "Attiva altra scorciatoia da tastiera" su Ctrl + A. Ripeti per Ende Ctrl + E.
  5. Al termine, il pannello dovrebbe apparire così:Pannello BetterTouchTool
  6. In Impostazioni avanzate di BetterTouchTool, consenti l'esecuzione all'avvio.

Nota: non chiudere l'app BetterTouchTool o smetterà di intercettare la pressione dei tasti. Basta chiudere la finestra e dovrebbe continuare a lavorare in background.


Grazie - l'ho usato su El Capitan perché ho già pagato per BetterTouchTool e funziona perfettamente con Chrome, Slack e altre app.
RichVel,

9

Sto usando il fantastico KeyRemap4MacBook con le impostazioni personalizzate di seguito.

Corregge Home / End nella maggior parte delle applicazioni e non rovina iTerm2.

Da 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>

Non è stato aggiornato per funzionare con Sierra, per il link sopra.
james.garriss,

Questo strumento è stato rinominato Karabiner e sembra funzionare con OS X El Capitan 10.11, Sierra 10.12 e High Sierra 10.13.
RichVel,

7

Ho trovato utile quanto segue per iterm2e zshcon le virgolette da qui :

Aprire iTerm > Preference. Vai a profiles tab > Keys. Quindi fai clic sul +pulsante nella parte inferiore dell'elenco dei tasti, premi Home(o Fn+left arrowsulla tastiera Apple cordless), Actionseleziona Send Escape Sequence, quindi digita[1~

Ripetere l'operazione per la Endchiave con [~4per la sequenza di chiavi di escape.

Se stai usando zsh, fai anche questo:

1) Inserire quanto segue nel ~/.zshrcfile

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

2) Esegui source ~/.zshrcin tutti i terminali aperti.


iTerm2 ha anche una preimpostazione di mappatura dei tasti "Modifica del testo naturale" che include questo comportamento.
Matt M.

Deve essere cambiato in bindkey "^[[~4" end-of-line. Nota la posizione del 4.
Ty.

@ Grazie, ma puoi spiegare perché? La fonte originale, oltre a github.com/reenhanced/zsh-config/blob/master/lib/… e github.com/ThiefMaster/zsh-config/blob/master/zshrc.d/… use "^ [[4 ~ "
RationalDev il

Non sono esperto di queste sequenze di escape, ma per me ^[[4~echeggia fuori 4mentre ^[[~4sposta il cursore alla fine della linea.
Ty.

@Ty Interessante. Ho fatto qualche ricerca per capire perché, ma sono stato solo in grado di trovare esempi di ^[[4~. Che tipo di tastiera e codifica dei caratteri stai usando, forse questo fa la differenza?
RationalDev,


5

Ho realizzato questo usando Karabiner Elements .

È necessario aggiornare la sezione delle regole ~/.config/karabiner/karabiner.jsoncon l'array JSON dal codice seguente. In questo modo rimappa i tasti home e end in modo che funzionino su 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"
        }
      ]
    }
  ]
}

vedi anche: github gist

inserisci qui la descrizione dell'immagine


1

@ La risposta di Lri è fantastica ( grazie mille; questo mi stava facendo impazzire ), ma ho finito per modificarlo un po '.

(In questa risposta, utilizzo i nomi non appley per le chiavi, quindi command = super e opzione = alt.)

Super-left e super-right erano effettivamente mappati su moveToLeftEndOfLinee moveToRightEndOfLine. L'uso moveToBeginningOfLinee moveToEndOfLine, come fa @Lri, può causare comportamenti incoerenti.

Ci sono molte altre differenze tra le scorciatoie appley e letteralmente le scorciatoie di tutti gli altri che ho aggiunto. Ad esempio, si suppone che ctrl-sinistra e ctrl-destra si muovano tra le parole; non alt-sinistra e alt-destra. Non penso che sia esaustivo, ma in questo momento funziona abbastanza bene per me. Presumo che l'utente abbia già scambiato il controllo e i tasti super per correggere il taglio, la copia e l'incollaggio.

~/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
}

-3

Puoi anche rimappare i tasti della tastiera, nonché personalizzare il mouse e il trackpad in tutti i modi più interessanti, con il BetterTouchTool gratuito, disponibile su http://blog.boastr.net/ . Un'ottima soluzione per personalizzare il funzionamento dei dispositivi di input!


2
Potresti espandere la tua risposta con le istruzioni su come utilizzare il software specificato per risolvere il problema originale?
grg

Non libero in entrambi i sensi "Free Beer" o "Freedom". Software di prova a 45 giorni chiuso, a pagamento.
Wyatt8740,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.