¿Cómo eliminar parte de una ruta en un shell interactivo?

19

¿Hay un acceso directo en bash y zsh para eliminar un componente de una ruta? Por ejemplo, si escribo ls ~/local/color/y el cursor está al final de la línea, ¿hay un atajo para eliminarlo color/al final? Idealmente, quiero soluciones tanto en modo vi como en modo emacs

Vayn
fuente

Respuestas:

25

Los comandos más utilizados en el modo bash emacs predeterminado , para los teclados más utilizados:

Movimiento

  • Ctrl- p, o Up: comando anterior
  • Ctrl- n, o Down: siguiente comando
  • Ctrl- b, o Left: carácter anterior
  • Ctrl- f, o Right: siguiente caracter
  • Alt- b: palabra anterior
  • Alt- f: siguiente palabra
  • Ctrl- a, o Home: comienzo del comando
  • Ctrl- e, o End: fin del comando

Edición

  • BkSpc: eliminar el carácter anterior
  • Ctrl- d, o Del: borra el caracter actual
  • Alt- BkSpc: borra la palabra a la izquierda
  • Alt- d: borra la palabra a la derecha
  • Ctrl-u : eliminar al inicio del comando
  • Ctrl- k: eliminar al final del comando
  • Ctrl- y: pegar el último corte

Miscelánea

  • Cltr- /: deshacer
  • Cltr- r: búsqueda incremental del historial hacia atrás
enzotib
fuente
2
Complemento: establezca un acceso directo para este propósito en zshbindkey [key] vi-backward-kill-word
Vayn
Gracias. Agregué esto a mi archivo ~ / .zshrc y funciona bien para mí cuando presiono Alt + Retroceso: tecla de enlace "^ [^?" vi-hacia atrás-kill-word. No es ideal
Tim Stewart
Alt-Bckspc y Alt-d funcionan bien con las rutas de archivo en las que los he probado. (en bash)
recatada
10

También hay unix-filename-ruboutpara Readline!

# in ~/.inputrc
# press ctrl-b to delete unix filename parts
# see: man bash | less -p 'unix-filename-rubout' and
#      http://www.calmar.ws/vim/vi-bash.html
set editing-mode vi
set keymap vi
"\C-b": unix-filename-rubout
mikeo
fuente
2
En mi humilde opinión unix-filename-ruboutes la respuesta correcta a la pregunta formulada, ya que elimina los espacios en blanco para recortar o, mientras que Alt-BkSpcno se detendrá ante personajes como guión, guión, punto, etc.
Steve
6

Por defecto, bash (y supongo que zsh) estará en modo emacs. Podrías probar algo como esto:

Esc + bdevolverá el cursor una palabra. Ctrl + keliminará hasta el final de la línea.

La mayoría de los shells modernos (como bash) implementarán funciones avanzadas de edición de línea de comandos. Esos comandos están cerca de la edición de emacs (Ctrl + A para el inicio de línea, Ctrl + E para el final de línea, ...).

Si está familiarizado con los editores similares a vi, puede intentar permitir el modo vi.

set -o vi

Le da a su shell modos similares a vi (modo de comando / modo de inserción), y obtiene acceso a los comandos estándar (d para eliminar, r para reemplazar, ...)

En el modo Vi, así es como harías lo que describiste:

Esc (command mode); d; b.
rahmu
fuente
1
No diría "La edición de línea de comandos es aún más potente y completa en modo vi", el modo emacs tiene comandos para hacer todo lo que puede hacer en modo vi .
enzotib
Admito que me dejé llevar un poco. Reformularé esto.
rahmu
Gracias por recordarme que hay modo vi en bash, por lo que puedo usarlo dben este escenario en bash. También encontré que vi-backward-kill-worden zsh es lo que quiero, y es más conveniente que establecer el modo vi en bash. Pero todavía quiero encontrar un acceso directo de modo emacs para este propósito en bash.
Vayn
O "alt-bC". De esta manera no deja un carácter final, lo dbque en algunos casos sí.
Comodín el