2009-08-31 19 views
8

Quiero cambiar los delimitadores bash (o readline) utiliza para separar palabras. Específicamente quiero hacer '-' no delimitan las palabras, por lo que si tengo el textoCambiar los delimitadores de palabras en bash

ls some-file 

y presiono Alt-Backspace se borra todo el texto some-file y no sólo hasta el '-' carbón. Esto también hará que las eliminaciones de indicadores largos como --group-directories-first sean más rápidas y sencillas, y solo necesiten una pulsación de tecla.

Creo que así es como se comporta zsh y me gustaría hacer que bash se comporte de la misma manera.

+0

El carácter '-' tiene un significado especial en una línea de comando, por lo que el comportamiento predeterminado no es sorprendente. Si puede cambiarlo, ¿habrá algún efecto secundario? Supongamos que ha escrito 'ls -al some-file', ¿quiere eliminar todo? – pavium

+0

@pavium, en ese caso, querría que 'some-file' se borre al principio, y cuando lo presione una segunda vez me gustaría que '-al' se elimine. – spatz

+1

Acabo de encontrar [la respuesta] (http://superuser.com/questions/547130/bash-readline-for-move-forward-by-whitespace-delimited-word) en superuser.com. – Ekans

Respuesta

7

ctrl-w hace exactamente lo que quiere.

+0

Leí esa parte del manual un trillón de veces, no puedo creer que me haya perdido. Gracias :) – spatz

+3

Me limitaré a señalar que después de experimentar con él un poco todavía no es óptimo ya que las barras se ignoran como separadores, lo que es molesto cuando se trabaja con rutas. Agregué la línea '" \ ew ": unix-filename-rubout' a'/etc/inputrc' y ahora M-e borra una palabra ignorando los guiones, pero trata las barras como separadores. – spatz

3

Una cosa a tener en cuenta es que la asignación de teclas bash para ctrl-W no funcionará si tiene la configuración de werase wedge asignada a ctrl-W. Si ejecuta "stty -a" y ve "werase =^W" que tendrá prioridad y usará la idea tty de lo que es un límite de palabras. La idea del tty de un límite de palabras suele ser el espacio en blanco, mientras que la función de palabras atrás de kill de bash también incluye - y /.

Si desea hacer Alt-Retroceso hacer lo mismo que el ajuste werase, usted puede hacer esto: bind ' "\ M- \ Ch": Unix-palabra-Rubout' bind '"\ M- \ C-? ": Unix-word-rubout '

Además, si realmente quisiera hacer ctrl-W haciendo lo que Alt-Backspace hace, haría: stty werase undef # a menos que haga esto, bash ignora El siguiente comando de vinculación bind '"\ Cw": retroceder-matar-palabra'

+1

No relacionado con el OP, pero 'werew werase undef' solucionó totalmente mi problema. ¡Gracias! –

1

Esto puede ser útil: Ctrl-r iniciará una búsqueda-inversa (para el historial Y la línea actual), para que pueda acaba de golpear el espacio y escapar y está de vuelta cuando Si lo deseas, o ctrl-r otra vez (después de tocar el primer espacio) si quieres volver una arg más. Entonces, opcionalmente, puedes matar el resto de la línea.

Especialmente útil si se trata de argumentos de ruta larga (por ejemplo, en cp o diff), y es necesario modificar el final del primer arg.

Intenté obtener \ M-b para hacer esto, pero se detiene en barras inclinadas.

Cuestiones relacionadas