Come richiamare un comando precedente (senza esecuzione) per cambiarlo?


14

Non ricordo il trucco in cui avrei potuto ottenere l'ultimo comando senza eseguirlo:

diciamo che voglio essere in grado di accedere al comando! 1255 quando si preme il tasto freccia su e si modifica il comando. Quindi qual è il trucco per chiamare il comando, farlo apparire nella riga di comando ma non eseguito e successivamente accessibile tramite il tasto freccia su?

Ho provato a mettere un'eco, ma poi ho un'eco prima del comando, non ricordo come farlo correttamente.


4
se capisco correttamente la tua richiesta, forse prova un suffisso ": p" come in "! 1255: p"
Teofhrastus

@Theophrastus sì, esattamente, avevo dimenticato questo: p parte e non riuscivo a trovare le parole chiave giuste su Google per trovarlo ... Grazie ragazzi.
Arturas M

Risposte:


21
!1255:p

Lo farà

!Questo richiamo della cronologia
1255è il numero di riga
:pstampato ma non eseguito

Quindi è possibile utilizzare la freccia su per ottenere il comando precedente (non eseguito) e modificarlo in base alle proprie esigenze.

Spesso lo combino con hg("History Grep"), il mio alias preferito.

$ alias hg  # Maybe use hgr instead if you are a Mercurial CLI user.
alias hg='history | tail -200 | grep -i'

Questo cerca il testo su una riga della cronologia recente, indipendentemente dal caso e viene utilizzato in questo modo:

Quando voglio cercare i comandi vi recenti per modificare un determinato file e quindi riutilizzare uno di essi per modificare lo stesso file ma con un'estensione di file diversa.

$ hg variables
 6153  vi Variables/user-extensions.js 
 6176  vi Variables/user-extensions.js 
 6178  vi Variables/user-extensions.js 
 6190  vi Variables/user-extensions.js 
 6230  hg variables
$ # Notice the difference in case with V and v is ignored
$ !6190:p
vi Variables/user-extensions.js 
$ ["up-arrow"]
$ vi Variables/user-extensions.[now change .js to .html]

Definisco anche hga("History Grep All") per cercare in tutta la mia cronologia:

$ alias hga
alias hga='history | grep -i'

ma non lo uso molto perché la mia storia è (intenzionalmente) molto grande e ottengo un output eccessivo che in seguito influisce sullo scorrimento indietro delle pagine nel mio terminale.



1
Buona nota Aggiunto per rispondere.
Michael Durrant,

12

Colpire Ctrl+ R(che è l'associazione della chiave di ricerca incrementale inversa di emacs mentre @gnp si spostava nei commenti) nel terminale consente di cercare un histrory in un comando specifico. Il comando verrà mostrato e può essere modificato prima dell'esecuzione. Vedrai qualcosa del genere:

inserisci qui la descrizione dell'immagine

fonte


1
Grazie! Non proprio la risposta diretta alla mia domanda, ma non lo sapevo e lo trovo davvero utile. Grazie mille!
Arturas M

1
Inoltre, Ctrl + R è la ricerca incrementale inversa di emacs. Molte combinazioni di tasti di emacs funzionano attraverso molti strumenti GNU: Ctrl + A, Ctrl + E, Ctrl + K, Ctrl + Y e altri.
GnP,

@gnp Grazie per l'informazione, non lo sapevo.
Hamza Abbad,

Mi ci è voluto molto tempo a mio agio con Ctrl-R dopo aver appreso due cose chiave. 1. ignora l'output durante la digitazione. 2. Assicurati di conoscere abbastanza da digitare abbastanza in modo univoco per il comando che desideri
Michael Durrant,

7

il fccomando fa quello che vuoi

fc -l <number> elencherà la cronologia dei comandi attorno a quel numero

fc <number>aprirà quella voce della riga di comando vim(o qualunque sia il tuo editor predefinito suppongo), quindi puoi modificarlo e su di :wqesso sarà disponibile per te con la freccia su.


7

In bash l' Ctl+alt+eespansione della shell, quindi digitando !1255e quindi premendo questa combinazione sostituirà la riga corrente con il contenuto della voce di cronologia 1255


non l'ho fatto per me su Ubuntu
Michael Durrant,

@MichaelDurrant, ho appena provato il 14.04 (kubuntu) e funziona per me. È documentato in man bashcome shell-expand-line. Forse esiste una scorciatoia per gnome-terminal.
adone il

@adonis Non l'ho mai conosciuto, grazie mille, anzi fa anche quello che stavo chiedendo. E in effetti posso trovare più usi da questa funzione. Eccezionale! Grazie!
Arturas M

4

Si desidera utilizzare il comando fc mentre si specifica list invece di execute (-l)

fc -ln -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.