Terminal Mac OS X: Opción de mapa + eliminar para "eliminar palabra al revés"

232

Intenté mapearlo desde Preferencias -> Configuración -> Teclado, pero el cuadro combinado "clave" solo tiene "borrar hacia adelante" pero no "borrar". ¡Mi teclado, por otro lado, solo tiene "borrar" y no "borrar hacia adelante"!

¿Hay alguna otra forma de hacerlo, excepto por las preferencias?

ibz
fuente
Por "eliminar palabra hacia atrás", ¿quiere decir la tecla de retroceso? No conozco ningún teclado reciente de Apple que tenga una tecla de eliminación.
Sören Kuklau
Por "eliminar palabra hacia atrás" quiero decir exactamente eso: eliminar toda la palabra comenzando desde el cursor hacia atrás. :) El último Macbook tiene una clave etiquetada "eliminar", pero actúa como retroceso.
ibz
Estoy enfrentando el mismo problema. el teclado tiene una eliminación hacia atrás pero no se puede usar como enlace en Terminal.app.
knoopx
Para mí, su pregunta merece millones de votos a favor. Me ayudó mucho. Anteriormente, yo era Ubuntu. Ahora, esto también me facilitó la vida en Mac OS. Gracias.
doptimusprime

Respuestas:

424

Habilitar tecla de opción como meta clave

  1. Ir a Terminal> Preferences> Profiles>Keyboard
  2. Compruebe Use option key as meta key.

Imagen

En macOS High Sierra 10.13.6, capturado el 23 de octubre de 2018.

Ilustración de la ventana para alternar la tecla de opción como tecla meta

Notas

Muchas aplicaciones (incluidas bash y tcsh) tratan Meta-Delete como "palabra de eliminación hacia atrás".

Andru Luvisi
fuente
32
Está en Preferencias de terminal> configuración> teclado, justo en la parte inferior.
Jon
16
¿Por qué esto no es predeterminado?
Ross Hambrick
8
En Yosemite, esta configuración ahora se encuentra en Preferencias -> Perfiles -> Teclado. Parece que tiene que cambiarlo / configurarlo para cada perfil.
palimpsestor
66
En los teclados que no son de EE. UU., A menudo se necesita la tecla de opción para obtener ciertos caracteres (por ejemplo, la barra '|' es bastante importante en el shell). En ese caso, ¿<Esc> by <Esc> f mencionados en otras respuestas son probablemente la mejor solución?
Touko
8
Desafortunadamente, esto es contraproducente para los programadores con teclados extranjeros que necesitan usar la tecla de opción para obtener símbolos especiales como {, porque eso no funcionará cuando la tecla de opción se use como meta tecla.
Magne
74

El terminal de OS X ejecuta bash, que incluye soporte de readline. Siga los consejos de Glomek y dígale a la terminal que use la opción como meta clave (o use Esc) y luego tiene un montón de opciones útiles: Ctrl+ welimina la palabra anterior (al igual que Meta + eliminar como se mencionó), pero también puede usar Meta + f y Meta + b para caminar hacia adelante y hacia atrás a través de las palabras, Ctrl+ ay Ctrl+ eal principio y al final de la línea, Ctrl+ keliminar (matar) del cursor al final de la línea, y un montón más.

Ver http://www.bigsmoke.us/readline/shortcuts para una pequeña y agradable tabla de referencia.

nadafigmento
fuente
3
¿Cómo es esto "útil"? El resto del sistema se usa deletecon calificadores para eliminar palabras.
idrougge
¿Es posible tener "eliminar línea" también?
wenbert el
1
Readline es genial, pero esto no ayuda a OP. Ctrl + w elimina una PALABRA (separada por espacios en blanco), no una palabra (separada por signos de puntuación + espacios en blanco). Con el cursor al final de cat .git/refs/heads, Ctrl-w da como resultado cat. Meta + eliminar resultados encat .git/refs/
idbrii
@nadafigment, 'a' y 'e' significa?
Pacerier
63

Eliminar una palabra que retrocede:

Ctr-w.

Shai
fuente
2
Bueno, después de leer esto descubrí que "Eliminar palabra hacia adelante" es Ctrl + K (por prueba y error). ahora me pregunto por qué hay tan poca documentación sobre todo esto.
victor n.
8
Ctr-k elimina todo al frente, no solo una palabra, ¿no?
Shai
Esto funciona en mi Mac. ¿Funciona también en Ubuntu Linux?
user391339
1
Ctrl + w elimina una PALABRA (separada por espacios en blanco), no una palabra (separada por signos de puntuación + espacios en blanco). Con el cursor al final de cat .git/refs/heads, Ctrl-w da como resultado cat. Meta + eliminar resultados encat .git/refs/
idbrii
24

De forma predeterminada, la retroceso meta hace que una palabra retroceda en la mayoría de los shells. Si presiona escape y luego presiona la tecla de retroceso, eso prácticamente funciona en todas partes.

Dustin
fuente
3
Fantástico, eso no requiere configuración adicional. Me doy cuenta <Esc> by <Esc> ftambién trabajo para saltar hacia adelante o hacia atrás una palabra.
joeytwiddle
1
Me gusta <ALT> + FLECHA más. ESC no permite clics continuos en bof.
Vitali Pom
1
He estado usando <ALT> + FLECHA para moverme, pero encuentro que no hay forma de eliminarlo de manera similar. El enfoque CTRL + W mencionado anteriormente no se detiene en caracteres que no son palabras de la misma manera que <ALT> + FLECHA lo hace, por lo que elimina todo hasta el espacio en blanco. Cualquier forma de eliminar usando una detección de límite similar a <ALT> + FLECHA sería apreciada
Rene Wooller el
18

⌃W(control + W) no es lo mismo que meta + eliminar (ESC + eliminar si no ha marcado la opción de uso como meta clave) meta + eliminar tratará / _como delimitador de palabras donde ^Wconsiderará el espacio como delimitador.

por ejemplo, usando ESC + Bakcspace en (cursor al final)

rm /dira/dirb/file1

da

rm /dira/dirb/

mientras ^ W en el mismo dará

rm

Por lo tanto, es mejor usar \ 033 \ 177 en lugar de ^ W al definir la modificación del perfil del terminal. De esa manera, realmente está asignando ⌥⌫ a lo que está haciendo esc⌫ y sigue teniendo ^ W para borrar palabras según el delimitador de espacio.

Me encantaría poder publicar una imagen sobre cómo hacer esto, pero como novato no puedo.

consulte el comentario de bouke para ver cómo modificar el perfil del terminal.

Stephane Gasparini
fuente
55
Para aquellos que quieran hacer esto iterm2, pueden ir a Preferencias> Teclas> agregar la asignación de teclas ⌥⌫para enviar códigos hexadecimales 0x1B 0x7F. 🍻
qix
¿Cómo descubriste que eso \033\177es lo que quieres para "eliminar una parte de una palabra"?
adiabático el
de hecho, solo tiene que presionar la secuencia de teclas que desea en el cuadro de diálogo Preferencia de terminal. Preferencias → Perfiles → pestaña Teclado → botón + luego seleccione la "opción" del modificador y la tecla "⌫ eliminar", luego seleccione el campo de texto y presione la tecla de escape, luego presione la tecla ⌫ y listo. Esc + ⌫ hace lo mismo que ⌥⌫
Stephane Gasparini
14

En el perfil de su Terminal, puede vincular ⌥⌫ (opción + eliminar) a ⌃W (control + W), por lo que funciona de manera similar a otras aplicaciones.

Configuración del teclado de perfil de terminal

Bouke
fuente
stty tiene que tener ^ w mapeado para borrar (comportamiento predeterminado) para que esto funcione. Use stty -a en la línea de comando para ver cómo se configuran las asignaciones.
natersoz
4

Atajos de edición de comandos

Ctrl + a: ir al inicio de la línea de comando

Ctrl + e: ir al final de la línea de comando

Ctrl + k: eliminar del cursor al final de la línea de comando

Ctrl + u: eliminar del cursor al inicio de la línea de comando

Ctrl + w: eliminar del cursor al inicio de la palabra (es decir, eliminar una palabra hacia atrás)

Ctrl + y: pegue la palabra o el texto que se cortó usando uno de los atajos de eliminación (como el anterior) después del cursor

Ctrl + xx: moverse entre el inicio de la línea de comando y la posición actual del cursor (y de nuevo)

Alt + b: retroceder una palabra (o ir al inicio de la palabra en la que está actualmente el cursor)

Alt + f: avanzar una palabra (o ir al final de la palabra en la que está actualmente el cursor)

Alt + d: eliminar hasta el final de la palabra que comienza en el cursor (palabra completa si el cursor está al comienzo de la palabra)

Alt + c: capitalizar hasta el final de la palabra comenzando en el cursor (palabra completa si el cursor está al comienzo de la palabra)

Alt + u: escribe mayúsculas desde el cursor hasta el final de la palabra

Alt + l: hacer minúsculas desde el cursor hasta el final de la palabra

Alt + t - intercambia la palabra actual con la anterior

Ctrl + f - avanza un personaje

Ctrl + b: retrocede un personaje

Ctrl + d: elimina el carácter debajo del cursor

Ctrl + h: elimina el carácter antes del cursor

Ctrl + t: intercambia el carácter debajo del cursor con el anterior

Atajos de recuperación de comandos

Ctrl + r: busca el historial al revés

Ctrl + g: escapar del modo de búsqueda del historial

Ctrl + p: comando anterior en el historial (es decir, volver al historial de comandos)

Ctrl + n: siguiente comando en el historial (es decir, avanzar por el historial de comandos) Alt +. - usa la última palabra del comando anterior

Atajos de control de comando

Ctrl + l - borra la pantalla

Ctrl + s: detiene la salida a la pantalla (para el comando detallado de ejecución prolongada)

Ctrl + q: permite la salida a la pantalla (si se detuvo previamente con el comando anterior)

Ctrl + c - termina el comando

Ctrl + z - suspender / detener el comando

Comandos de Bash Bang (!) Bash también tiene algunas funciones útiles que usan el! (explosión) para permitirle hacer algunas cosas funky con comandos bash.

!! - ejecuta el último comando! Blah - ejecuta el comando más reciente que comienza con 'blah' (ej.! Ls)

! blah: p - imprime el comando que se ejecutará! blah (también lo agrega como el último comando en el historial de comandos)

! $: La última palabra del comando anterior (igual que Alt +.)

! $: p - imprime la palabra que! $ sustituiría

! *: El comando anterior, excepto la última palabra (por ejemplo, si escribe '_find somefile.txt /', entonces! * Le dará '_find somefile.txt')

! : p - imprime qué! sustituiría

Curtis M
fuente
2

Con Natural Text Editingpreajuste habilitado en Perfil -> Teclas. Simplemente puedes eliminar la palabra

  • Hacia atrás con alt + delete
  • Adelante con fn + alt + delete
Anthony Artemiev
fuente