Reasigne "Inicio" y "Fin" al principio y al final de la línea


326

La mayor parte de mi tiempo de computación lo paso en Linux (con tiempo ocasional en Windows). En estas plataformas, las teclas Homey Endsaltan universalmente al principio o al final de la línea actual.

Poco a poco me estoy acostumbrando a usar la única computadora Apple en mi vida, pero sigue siendo frustrante ya que estas teclas parecen estar vinculadas al principio y al final del documento y no parece haber ninguna clave para la línea. acciones basadas

Mi pregunta:

  1. ¿Hay combinaciones de teclas existentes que faltan para el principio y el final de la línea? (Utilizo principalmente un Terminal, Chrome y LibreOffice)
  2. ¿Hay alguna manera de volver a vincular las funciones de estas teclas a las funciones con las que estoy familiarizado? Estoy dispuesto a renunciar a las versiones basadas en documentos que me parecen de poca utilidad.

También dos advertencias:

  1. No soy el único usuario en el sistema. Sería bueno si la configuración de mi usuario no rompiera la experiencia de otras personas. Si esto no es posible, ¡creo que probablemente tenga la preferencia más fuerte!
  2. Utilizo varios idiomas y cambio entre diseños de teclado, por lo que se espera que cualquier solución funcione incluso cuando se alterna entre varios diseños de teclado.

1
Tenga en cuenta que si bien terminé encontrando una solución y respondiendo mi propia pregunta, estoy abierto a soluciones más fáciles o más versátiles. Además, el proceso de descubrir esto no está claro. Por ejemplo, ¿dónde encuentra códigos de clave y nombres de acción si quisiera reasignar más claves? ¡Siéntase libre de agregar respuestas si tiene conocimiento relevante!
Caleb

Respuestas:


304

Los accesos directos predeterminados para moverse al principio o al final de las líneas (ajustadas) son y . y o Ay Epasar al principio o al final de las líneas sin envolver (o párrafos). y moverse hacia atrás / adelante por palabras, y todo esto es compatible con mantener presionado Shiftpara seleccionar durante los movimientos correspondientes.

Puede reasignar inicio y fin creando ~/Library/KeyBindings/y guardando una lista de propiedades como esta como DefaultKeyBinding.dict:

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

La mayoría de las combinaciones de teclas para editar texto en OS X se definen en /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict.

La aplicación de cambios requiere la reapertura de las aplicaciones. DefaultKeyBinding.dict es ignorado por algunas versiones antiguas de Xcode (funciona con la última versión 6.3.1), Terminal y muchas aplicaciones multiplataforma.

Consulte Cocoa Text System y mi sitio web para obtener más información sobre las combinaciones de teclas personalizables.

Las combinaciones de teclas del terminal se pueden personalizar en Preferencias> Configuración> Teclado. \033OHse mueve al principio de una línea y \033OFal final de una línea.

En Eclipse, las asociaciones de teclas deben modificarse en Preferencias> General> Teclas. Debe modificar los enlaces predeterminados para los comandos Inicio de línea y Fin de línea (reemplace ⌘ ← por ↖ y ⌘ → por ↘). Para que la selección funcione, también modifique Seleccionar inicio de línea y Seleccionar final de línea .

PD: es posible que deba cerrar sesión e iniciar sesión nuevamente para que el ~/Library/KeyBindings/DefaultKeyBinding.dictcambio surta efecto.


1
Información útil sobre las asignaciones clave: las he usado con la herramienta BetterTouchTool (comercial), vea esta respuesta .
RichVel

3
Esto no funciona en la mayoría de las aplicaciones en mi experiencia. Es mejor usar Karabina-Elements.
Timmmm

3
Esto es genial porque funciona en Terminal, iTerm2, Chrome, Sublime y Outlook. La alternativa (Karabina) es menos buena porque eso asigna "Inicio" a Comando + Flecha izquierda, que en realidad cambia las ventanas en la Terminal. Debe recordar reiniciar todas las aplicaciones después de guardar el archivo .dict.
Will Sheppard

1
Esto no funciona con vim
MohitC 01 de

2
Esta configuración me funciona en Mac OS Mojave con teclado externo conectado.
jdhao

106

Actualmente estoy en Lion 10.7.4, y por alguna extraña razón, la edición ~/Library/KeyBindings/DefaultKeyBinding.dictno funcionó para mí.

He descubierto que el complemento de preferencias del sistema KeyRemap4MacBook (que ahora se llama Karabiner ) funciona muy bien, y también puede reasignar una variedad de teclas con él, sin tener que editar ningún archivo de texto. Por ejemplo, cambiar las teclas de página arriba / página abajo para que el cursor también siga en la página arriba / abajo.

Simplemente descargue el complemento y, en el panel de Preferencias del sistema, vaya a la For PC Userssección y verifique Use PC Style Home /End.

Tenga en cuenta que elegí en (Change Home to Command+Left)lugar de (Change Home to Control+A), como si eligiera el primero, y si la línea estaba ajustada, el hogar me llevaría al comienzo de la línea ajustada, varias líneas arriba, en lugar de llevarme al comienzo de la línea actual.

KeyRemap4MacBook


99
Karabiner es genial y también de código abierto
Jedidja

2
Con 10.10.5, las otras sugerencias parecen no funcionar, pero Karabiner (el nuevo nombre de KeyRemap4MacBook - funciona en todos los productos Mac) funciona bien, y no necesita reiniciar para que los cambios surtan efecto. Muy útil para este novato de Mac; Esperemos que otros puedan beneficiarse también.
Ralph J

1
A partir de hoy, "Karabiner no funciona en macOS Sierra en este momento".
james.garriss

2
@ james.garriss Dale una oportunidad a Karabiner-Elements - el mismo autor aunque reescrito desde cero para apoyar a Sierra (todavía está en desarrollo, por lo que son bastantes asperezas) - github.com/tekezo/Karabiner-Elements
jklp

55
@jklp Desafortunadamente, la funcionalidad necesaria para reasignar las teclas Inicio y Fin en el teclado extendido de Apple aún no está disponible en Karabiner Elements. Personalmente, parezco tener la memoria muscular para Ctrl-a, Ctrl-e cuando trabajo en la consola, pero cuando trabajo en una aplicación GUI como Sublime, es muy difícil de recordar. Para Sublime (específicamente) hay una solución, sin embargo: coderwall.com/p/upolqw/…
Ville

43

Gracias a este artículo , descubrí cómo volver a vincular las teclas Homey Enda las acciones basadas en líneas por usuario que funciona en diseños de teclado.

Debe crear un archivo de diccionario con los códigos de tecla y los nuevos comandos para asignar, pero primero asegúrese de que la carpeta donde se colocará esto abra una Terminal y ejecute:

$ mkdir -p ~/Library/KeyBindings

Luego cree o edite el archivo en ~/Library/KeyBindings/DefaultKeyBinding.dict. Si no existía antes, agregue la sección completa a continuación. Si existe, simplemente agregue las cuatro filas nuevas dentro del bloque.

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

Para activar la configuración, deberá cerrar la sesión de su usuario e iniciar sesión nuevamente.

Tenga en cuenta que esto cubre tanto la acción normal de mover el cursor como la combinación Shift+ Home/ Endpara seleccionar el movimiento del cursor en movimiento.


12

Estoy usando OS X Sierra, y la ~/Library/KeyBindings/DefaultKeyBinding.dictsolución sugerida por otros usuarios funcionó parcialmente: algunas aplicaciones como TextEdit ahora tienen el comportamiento deseado, pero otras no. Google Chrome y Slack son dos que no parecen respetar el DefaultKeyBinding.dictarchivo.

Para solucionar las aplicaciones restantes, solía BetterTouchTool para crear atajos de teclado específicas de la aplicación de unión Homey Endde atajos nativos OS X Ctrl+Ay Ctrl+E. BetterTouchTool no es gratuito, pero hay un período de prueba de 45 días.

Para hacer esto:

  1. Instalar y ejecutar BetterTouchTool
  2. Vaya a la pestaña Gestos> Teclado
  3. En "Seleccionar aplicación", haga clic +y elija la aplicación que desea corregir.
  4. Haga clic en "Agregar nuevo atajo", asigne la Hometecla en el campo "grabar atajo" y configure "Activar otro atajo de teclado" en Ctrl + A. Repita para Endy Ctrl + E.
  5. Cuando haya terminado, el panel debería verse así:Panel BetterTouchTool
  6. En Configuración avanzada de BetterTouchTool, permita que se ejecute al inicio.

Nota: no salga de la aplicación BetterTouchTool o dejará de interceptar las pulsaciones de teclas. Simplemente cierre su ventana y debería continuar trabajando en segundo plano.


Gracias, acabo de usar esto en El Capitan porque ya he pagado por BetterTouchTool, y funciona bien con Chrome, Slack y otras aplicaciones.
RichVel

9

Estoy usando el impresionante KeyRemap4MacBook con la configuración personalizada a continuación.

Repara Home / End en la mayoría de las aplicaciones y no arruina iTerm2.

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

No se ha actualizado para trabajar con Sierra, según el enlace anterior.
james.garriss

Esta herramienta ha sido renombrada a Karabiner y aparentemente funciona con OS X El Capitan 10.11, Sierra 10.12 y High Sierra 10.13.
RichVel

7

Encontré lo siguiente útil para iterm2y zshcon citas de aquí :

Abierto iTerm > Preference. Ir a profiles tab > Keys. Luego haga clic en el +botón en la parte inferior de la lista de teclas, presione Home(o Fn+left arrowen el teclado inalámbrico de Apple), debajo de Actionseleccionar Send Escape Sequence, y luego escriba[1~

Repita para la Endtecla con [~4para la secuencia de teclas de escape.

Si está usando zsh, también haga esto:

1) Coloque lo siguiente en su ~/.zshrcarchivo

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

2) Ejecutar source ~/.zshrcen cualquier terminal abierta.


iTerm2 también tiene un preajuste de asignación de teclas "Edición de texto natural" que incluye este comportamiento.
Matt M.

Necesita ser cambiado a bindkey "^[[~4" end-of-line. Tenga en cuenta la posición de los 4.
Ty.

@Ty gracias, pero ¿puedes explicar por qué? La fuente original, así como github.com/reenhanced/zsh-config/blob/master/lib/… y github.com/ThiefMaster/zsh-config/blob/master/zshrc.d/… usan "^ [[4 ~ "
RationalDev

No estoy bien versado en estas secuencias de escape, pero para mí se hace ^[[4~eco 4mientras ^[[~4mueve el cursor al final de la línea.
Ty

@Ty Interesante. Hice un poco de búsqueda para descubrir por qué, pero solo he podido encontrar ejemplos de ^[[4~. ¿Qué tipo de codificación de teclado y caracteres está utilizando, tal vez eso hace la diferencia?
RationalDev


5

Lo logré usando Karabiner Elements .

Debe actualizar la sección de reglas ~/.config/karabiner/karabiner.jsoncon la matriz JSON del código a continuación. Al hacerlo, se vuelven a asignar las teclas de inicio y finalización para que funcionen como funcionan en 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"
        }
      ]
    }
  ]
}

ver también: github gist

ingrese la descripción de la imagen aquí


1

La respuesta de @ Lri es increíble ( muchas gracias; esto me estaba volviendo loco ), pero terminé modificándolo un poco.

(En esta respuesta, uso los nombres que no son appley para las teclas, así que command = super y option = alt.)

La súper izquierda y la súper derecha solían estar asignadas a moveToLeftEndOfLiney moveToRightEndOfLine. Usar moveToBeginningOfLiney moveToEndOfLine, como lo hace @Lri, puede causar un comportamiento inconsistente.

Hay muchas otras diferencias entre los atajos de appley y, literalmente, los atajos de todos los demás que agregué. Por ejemplo, se supone que ctrl-left y ctrl-right se mueven entre palabras; no alt-left y alt-right. No creo que esto sea exhaustivo, pero está funcionando bastante bien para mí en este momento. Supuse que el usuario ya había cambiado el control y las superclaves para arreglar el corte, la copia y el pegado.

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

También puede reasignar las teclas del teclado, así como personalizar su mouse y trackpad de todo tipo de formas geniales, con la herramienta gratuita BetterTouchTool, disponible en http://blog.boastr.net/ . ¡Una excelente solución para personalizar el funcionamiento de sus dispositivos de entrada!


2
¿Podría ampliar su respuesta con instrucciones sobre cómo usar el software especificado para resolver el problema original?
grg

No es gratis en los sentidos "Cerveza gratis" o "Libertad". 45 días de prueba, software de código cerrado y pago.
Wyatt8740