Come ripetere i parametri attualmente digitati sulla console bash?


23

Stavo solo scrivendo qualcosa sulla falsariga di:

mv foo/bar/poit/zoid/narf.txt

e improvvisamente realizzato, accidenti, devo digitare di nuovo gran parte di quel parametro

mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt

Anche con il completamento delle compresse, un bel dolore. So di poter copiare incollare il parametro selezionando il mouse e facendo clic sul testo ma non è abbastanza buono. Voglio rimanere sulla tastiera.

Quindi c'è un modo per copiare incollare il parametro corrente della linea usando la tastiera?


3
Il mio consiglio non risponde alla tua domanda, ma è un piccolo suggerimento. Come nel tuo esempio, puoi usare la prossima costruzione: mv foo/bar/poit/zoid/{narf.txt,troz.txt}invece di digitare / copiare due volte l'indirizzo lungo.
corsa il

2
Leggermente più corto @ soluzione di Rush: mv foo/bar/poit/zoid/{narf,troz}.txt. Funziona particolarmente bene se abbiamo qualcosa del genere.../zoid/this_source_file_has_to_be_patched.c{,.orig}
Ansgar Esztermann,

@Rush Ti dispiace indicarlo come una risposta? Potrebbe non essere direttamente quello che ho chiesto, ma poi di nuovo, la tua soluzione è molto più al punto di quello che voglio. Merita un segno di accettazione.
k0pernikus,

Risposte:


15

Se ho pianificato in anticipo, utilizzo l' espansione del controvento . In questo caso:

mv foo/bar/poit/zoid/{narf,troz}.txt

Ecco un altro approccio che utilizza le readlinescorciatoie da tastiera predefinite :

  • mv foo/bar/poit/soid/narf.txt: inizio
  • Ctrl- w: unix-word-ruboutper cancellarefoo/bar/poit/soid/narf.txt
  • Ctrl- y, Space, Ctrl- y: yank, spazio, yankancora una volta per otteneremv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
  • Meta- backspace, Meta- backspace: backward-kill-worddue volte per eliminare l'ultimonarf.txt
  • troz.txt: digitare la parte di coda diversa

Se trascorri un po 'di tempo non banale usando la bashshell, ti consiglio di leggere periodicamente un elenco delle scorciatoie predefinite e di sceglierne alcune che sembrano utili da imparare e incorporare nella tua routine. Il capitolo 8 del bashmanuale è un buon punto di partenza. Conoscere le scorciatoie può davvero aumentare la tua efficienza.


! Neat Nel mio caso ho dovuto premere Alt + Backspace invece di Meta + Backspace.
k0pernikus,

3
@ k0pernikus Sì sulla maggior parte delle tastiere, il tasto Alt è il tasto Meta.
jw013,

1
Per salvare la riscrittura .txt, è possibile premere Ctrl + Sinistra (o qualsiasi altra scorciatoia che chiama backward-word), quindi Sinistra un carattere, quindi Alt + Backspace e digitare troz.
wjandrea,

24

L'espansione della cronologia in realtà funziona anche sul comando corrente, usando il designatore di eventi !#. Combina questo con la parola designatore per l'ultimo argomento - $- per ottenere il parametro che hai appena digitato. E puoi usare tutti i modificatori regolari su di esso, quindi se, ad esempio, stai rinominando un file in una directory lontana, puoi semplicemente digitare:

mv path/you/do/not/want/to/type/twice/oldname !#$:h/newname

Molto utile! Funziona particolarmente bene con l' magic-spaceopzione bash in inputrc per espandere automaticamente le espansioni della cronologia. (Non ho potuto usare la risposta più votata perché ho impostato ^ W per rompere le barre poiché di solito è più utile.)
Soren Bjornstad

@SorenBjornstad di alt+backspacesolito si ferma già ai delimitatori di parole come le barre, quindi non è necessario cambiare il modo ^Win cui ottenere quella funzionalità, puoi avere sia eliminare parole non delimitate da caratteri che spazi vuoti
Eric Renouf


6

Giocando ho capito che funziona:

mv foo/bar/poit/zoid/narf.txt

Premi Enter
per memorizzare l'ultimo parametro.

Ora usa per ottenere l'ultimo digitato nella riga indietro. Immettere uno spazio e per ottenere l'ultimo parametro utilizzato utilizzare:

Alt + .

Odio provocare un errore, ma fa il lavoro in questo caso d'uso.


Bene, un altro grande consiglio imparato!
Bram,

<kbd> Esc </kbd> + <kbd>. </kbd> è (vero?) uguale a <kbd> Alt </kbd> + <kbd>. </kbd>.
Nikos Alexandris,

2

Puoi usare facilmente le variabili:

a=test.csv ; cp $a $a.bak

O nel caso si (concorrenza scheda nota lavora per la una parte):

a=foo/bar/poit/zoid/ ; mv ${a}narf.txt ${a}troz.txt

2

Ho questo nel mio ~/.inputrc:

"\ej":"!#:$\e^"

!#è la riga corrente, :$è l'ultima parola ed \e^è history-expand-line.


questo dovrebbe essere contrassegnato come risposta. Premendo 'alt / opzione + j' ora si copia l'ultima parola.
mpprdev,

2

Per zsh, trovo utili le seguenti combinazioni di tasti.

# Bind alt-m to insert previous word from the current line
bindkey '^[m' copy-prev-shell-word

# Bind alt-k to kill word before cursor in vi-style
bindkey '^[k' vi-backward-kill-word

Quindi premo Alt- Mper ripetere l'ultimo argomento allora Alt- Kse voglio eliminare parti dalla fine di un percorso.

Ecco un utile riferimento ad alcuni dei comportamenti che è possibile mappare.


2

Una breve soluzione interattiva in due passaggi

  1. genere: echo foo/bar/poit/zoid/narf.txt

    Questo rende foo/bar/poit/zoid/narf.txtdisponibile il collegamento Alt- .in bash.

  2. tipo: mve successo Alt- ., Space, Alt-.

    Otterrai mv foo/bar/poit/zoid/troz.txt foo/bar/poit/zoid/troz.txt. Ora puoi modificare facilmente l'ultima parola.

Comandante di mezzanotte

Questo strumento che potrebbe essere (molto) utile è un file manager in esecuzione nella console. Ti dà la possibilità di copiare nomi di file e percorsi di directory in modo interattivo nella riga di comando. Midnight Commander mostra quindi 2 pannelli (sinistro e destro), che elencano i contenuti di diverse directory.

Una breve guida:

  • UpI Downtasti freccia / selezionano i file nel pannello corrente.
  • Tab passa dal pannello sinistro a quello destro.
  • Ctrl- Shift- Entercopia il file attualmente selezionato nella riga di comando (incluso il percorso completo)
  • Alt- oapre la directory attualmente selezionata nell'altro pannello
  • Ctrl- oti consente di vedere la console a schermo intero
  • Ctrl- x, pcopia il percorso del pannello attivo nella console
  • Ctrl- x, Ctrl- pcopia il percorso del pannello inattivo nella console
  • Esc- Tabè il completamento automatico

Questo è di gran lunga il modo più veloce che ho trovato finora - dopo essermi abituato alle scorciatoie.


0

Usa la stessa cosa nel {,} "duplicatore". Vale a dire:

git tag -m {v,v}1.0.1

# same as 

git tag -m v1.0.1 v1.0.1
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.