¿Cómo hago para que ⌘ ← y ⌘ → funcionen para el combo de inicio / fin de Terminal?

21

¿Por qué fn- - (u otros) hacen un hogar / final en la Terminal pero a - funciona en cualquier otro lugar?

Entonces, para que quede claro, la pregunta es cómo hacer que Terminal tome Command+ y para el hogar y el final.

Jackie
fuente

Respuestas:

21

Tan conveniente como sería, Terminal no puede proporcionar fácilmente la funcionalidad que usted solicita.

La razón es que los programas que se ejecutan dentro de Terminal tienen diferentes reglas para mover el cursor al principio / final de la línea, por ejemplo:

  • bash(y otras conchas) usan CtrlAyCtrlE
  • viusos 0y $/Shift4

Otros programas pueden usar otras teclas. No existe una combinación de teclas universal para colocar el cursor al principio / al final de la línea.

Por supuesto, Terminal podría mantener una lista de combinaciones de teclas para una serie de programas comunes, verificar lo que se está ejecutando y enviar las teclas correctas para usted, o podría proporcionar un elemento de menú como Mover el cursor al comienzo de la línea dentro de Shell ⌘ ← y luego enviar CtrlAentre bastidores. Pero supongo que los ingenieros de Apple pensaron que si te aventuras en el territorio de CLI conoces sus idiosincrasias.

Como nota al margen, Terminal proporciona Optiony Optionque se comporta bashcomo cabría esperar y mueve el cursor al comienzo de la palabra anterior / siguiente. Esto se debe a que estas combinaciones de teclas están asignadas a Escby Escb( man bashpara obtener más información, consulte la sección "Comandos para mover"). En vi, por ejemplo, solo el último (tipo de) funciona (al final de esta respuesta le mostraré cómo configurar vipara trabajar con Optiony Option).

Pero gracias a Automator, AppleScript y bash alias puedes obtener y trabajar con bash(y posiblemente otros shells) y vi.

El primer paso es mapear y hacia CtrlAy CtrlE. En un segundo paso, le mostraré cómo configurar vipara honrar CtrlAy CtrlE(que, como resultado, se hará vicompatible con y ).

Mapa y hacia CtrlAyCtrlE

  1. En Terminal, vaya a Preferencias ...> Configuración> [su perfil activo]> Teclado: ingrese la descripción de la imagen aquí

  2. Pulse +, seleccione "Cursor a la izquierda", "Control-Shift" como modificador y acción "Enviar texto:". Luego presione CtrlA( \001aparecerá en el campo de texto) y confirme con OK: ingrese la descripción de la imagen aquí

    (En una versión anterior de esta respuesta, utilicé "Shift" como modificador. Me di cuenta de que esta configuración entra en conflicto shift, lo que muestra la pestaña Terminal anterior, si no la sueltas inmediatamente. Usando "Control-Shift" arregla eso.)

  3. Ahora agregue una combinación de teclas para "Cursor derecho", pero presione CtrlE( \005aparecerá en el campo de texto). Confirmar con OK.

  4. Abra Automator (por ejemplo, presione spacepara que aparezca Spotlight y escriba Automator ), seleccione Archivo> Nuevo y elija Service:

    ingrese la descripción de la imagen aquí

  5. Arrastre Run AppleScriptal panel derecho: ingrese la descripción de la imagen aquí

  6. Escriba el siguiente script:

    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

    y guardar como Move Cursor to Beginning of Line:

    ingrese la descripción de la imagen aquí

  7. Repita los pasos 4. a 6. con este script:

    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

    y guardar como Move Cursor to End of Line:

    ingrese la descripción de la imagen aquí

  8. Así es como se ve Terminal> Servicios ahora:

    ingrese la descripción de la imagen aquí

Configurar vipara honrar CtrlAyCtrlE

  1. Abre .bashrccon tu editor favorito y agrega esta línea:

    alias vi='vim -c "map <C-A> 0" -c "map <C-E> $" -c "map <Esc>b B" -c "map <Esc>f E"'

    Los primeros dos mapcomandos le dicen vima interpretar ControlEy ControlAcomo $y 0, que mueven el cursor al principio o al final de la línea, respectivamente.

    Los dos últimos mapcomandos le indican vimque mueva el cursor una palabra a la vez como esperaría al presionar optiony Option.

Advertencias

Notará que hay un breve retraso entre el momento en que presiona o y el momento en que el cursor se mueve realmente.

Tenga en cuenta que solo funcionará para programas que honren CtrlA/ CtrlE, por lo que es posible que aún desee aprender las combinaciones de teclas específicas de cada programa que utiliza en Terminal.

(Probado en macOS Sierra 10.12.4)

jaume
fuente
3
Gracias por la respuesta detallada, ¿hay una petición para que Apple incluya un botón de inicio / fin en el próximo rediseño: --)
Jackie
Me alegro de poder ayudar.
jaume
Wow ... todo esto para obtener un
maldito
Esta es una buena respuesta, pero podría mejorarse excluyendo toda la información extraña sobre vicuál es una aplicación completamente diferente que el terminal.
axiopisty 05 de
1
Ese es un gran truco. También logré ejecutar el AppleScript enviando los códigos de tecla para "Inicio" y "Fin": "código clave 115" y "código clave 119" "
Keymon
2

Por supuesto que es posible.

En primer lugar, puede usar la herramienta gratuita "DoubleCommand" si tiene un teclado de Windows con teclas HOME / END para que se comporten como deberían (principio / fin de línea).

En segundo lugar, para el terminal específicamente, vaya a las preferencias, Teclado, edite el icono / tecla que se parece a una flecha apuntando hacia arriba a la izquierda, seleccione "enviar texto" y escriba ctrl + a. ¡Hecho!

Lo mismo para el botón de finalización.

Si no tiene un teclado de PC, puede hacer lo mismo con otras combinaciones de teclas.

George Katsanos
fuente