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.