Come eliminare parte di un percorso in una shell interattiva?


19

Esiste un collegamento in bash e zsh per eliminare un componente di un percorso? Ad esempio, se digito ls ~/local/color/e il cursore si trova alla fine della riga, esiste un collegamento per eliminare il color/alla fine? Idealmente, voglio soluzioni sia in modalità vi che in modalità emacs

Risposte:


25

I comandi più comunemente usati nella modalità bash emacs predefinita , per le tastiere più comunemente usate:

Movimento

  • Ctrl- poppure Up: comando precedente
  • Ctrl- noppure Down: comando successivo
  • Ctrl- boppure Left: carattere precedente
  • Ctrl- foppure Right: personaggio successivo
  • Alt- b: parola precedente
  • Alt- f: parola successiva
  • Ctrl- aoppure Home: inizio del comando
  • Ctrl- eoppure End: fine del comando

La modifica

  • BkSpc: cancella il carattere precedente
  • Ctrl- doppure Del: elimina il carattere corrente
  • Alt- BkSpc: elimina la parola a sinistra
  • Alt- d: elimina la parola a destra
  • Ctrl- u: elimina per iniziare il comando
  • Ctrl- k: elimina alla fine del comando
  • Ctrl- y: incolla l'ultimo taglio

Miscellanea

  • Cltr- /: annulla
  • Cltr- r: ricerca cronologica incrementale all'indietro

2
Complemento: imposta una scorciatoia per questo scopo in zshbindkey [key] vi-backward-kill-word
Vayn,

Grazie. Ho aggiunto questo al mio file ~ / .zshrc e funziona bene quando premo Alt + Backspace: bindkey "^ [^?" VI-backward-kill-word. Non è l'ideale
Tim Stewart,

Alt-Bckspc e Alt-d funzionano bene con i percorsi dei file su cui li ho provati. (a bash)
esca il

10

C'è anche unix-filename-ruboutper 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

2
IMHO unix-filename-ruboutè la risposta corretta alla domanda posta in quanto elimina la barra o gli spazi bianchi, mentre Alt-BkSpcsi ferma a caratteri come trattino, trattino basso, punto, ecc.
Steve,

6

Di default bash (e immagino che zsh) sia in modalità emacs. Potresti provare qualcosa del genere:

Esc + briporterà il cursore di una parola. Ctrl + kverrà eliminato fino alla fine della riga.

La maggior parte delle shell moderne (come bash) implementerà funzionalità avanzate di modifica della riga di comando. Questi comandi sono vicini alla modifica di emacs (Ctrl + A per l'inizio della linea, Ctrl + E per la fine della linea, ...).

Se hai familiarità con editor simili a vi, potresti provare a consentire la modalità vi.

set -o vi

Fornisce alla tua shell modalità simili a vi (modalità comando / modalità inserimento), e ottieni l'accesso ai comandi standard (d per cancellare, r per sostituire, ...)

In modalità Vi, ecco come faresti quello che hai descritto:

Esc (command mode); d; b.

1
Non direi "La modifica della riga di comando è ancora più potente e completa in modalità vi", la modalità emacs ha i comandi per fare tutto ciò che puoi fare in modalità vi .
enzotib,

Devo ammettere che mi sono lasciato trasportare un po '. Lo riformulerò.
Rahmu,

Grazie per avermi ricordato che c'è bas-mode in bash, quindi posso usare dbin questo scenario in bash. Ho anche trovato vi-backward-kill-wordin zsh quello che voglio, ed è più conveniente che impostare vi-mode in bash. Ma voglio ancora trovare un collegamento alla modalità emacs per questo scopo in bash.
Vayn,

O "alt-bC". In questo modo non lascia un personaggio finale, cosa dbche in alcuni casi lo fa.
Carattere jolly
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.