Come posso richiamare un comando cronologico numerato per la modifica?


17

Cerco frequentemente modifiche con history | grep 'string'

Ricevo un elenco di comandi nella mia cronologia, insieme al numero di riga della cronologia), ad es

history | grep 'git'

  755  git status
 1535  git push origin master
 1570  git merge origin/one-146
 1667  git reset --hard origin/master

Ora posso richiamare ed eseguire un comando in una volta sola !nnn, ad esempio:

!755
git status
# On branch master
nothing to commit, working directory clean

La mia domanda è: come posso richiamare un comando di cronologia numerato e rimanere sulla riga di comando per la modifica e non eseguirlo immediatamente "così com'è" !, così come posso fare, in modo che io possa cambiare un paio di cose per tornare alla presentazione?

Risposte:


12

Da allora ho adottato un altro approccio a questo: usare ![line-number]:p

Questo stampa la dichiarazione e la aggiunge alla cronologia ma non la esegue effettivamente. Poi faccio freccia su e la cambio come desiderato.

Unisco questo al mio hgalias ( alias hg='history | grep ') per richiamare i comandi della cronologia basati su del testo.

Esempio:

$ hg checkout

17140   git checkout README.rdoc
17143   git checkout master
17201   git checkout README.rdoc
17204   git checkout master
17923   git checkout .bashrc
18151   git checkout v311

Lo uso in aggiunta a ctrl- r(ricerca cronologia inversa) perché a volte preferisco vedere un elenco immediato di tutte le possibilità per una data stringa piuttosto che solo l'output su 1 riga che ctrl- rmostra. Dopo hg [string]farei quindi ![line-number]search_stringcome hg checkoutmostrato sopra.


8

Se si imposta l' histverify opzione , ad es

shopt -s histverify

quindi tutte le sostituzioni della cronologia vengono attivate per la modifica anziché essere eseguite immediatamente. Dovresti quindi premere Enterdue volte anziché una volta dopo aver digitato !755per eseguire il comando.

È possibile inserire testo arbitrario nell'elenco cronologico con history -s. Combina questo con fc -nlper elencare una voce della cronologia specifica.

history -s "$(fc -nl 755 755)"

quindi premere Upper richiamare quella che è ora l'ultima voce della cronologia.


6

Puoi cercare indietro nella cronologia usando Ctrl+ R. Se la voce della cronologia è lunga, utilizza il mouse (non la tastiera, che interrompe la ricerca) per copiare e incollare parte del comando in cui modificare.

Come ha commentato @rijsg, è quindi possibile utilizzare le frecce (sinistra e destra) o tasti equivalenti per interrompere la ricerca e iniziare la modifica.


2
Qualsiasi tasto freccia o comando equivalente ( Ctrl-aad esempio) interromperà la ricerca lasciando la voce della cronologia corrente nel prompt dei comandi, senza eseguirla. Questo può o non può essere abbastanza, a seconda di ciò che vuole @Michael.
njsg,

2

Se configuri il tuo file .bashrc per utilizzare l'editor vi dalla riga di comando, le modifiche alla riga di comando saranno molto meno complesse.

1 °, una volta abilitato "set -o vi" , puoi semplicemente premere "<esc> k" , quindi continuare a premere "k" per risalire al file della cronologia così com'era, se passi una voce, usa "j" andare giù .

NOTA: quando si utilizza vi, ci sono due modalità: comando e modifica per accedere alla modalità comando premere ESCAPE KEY ONCE, quindi a, A, i, I, ecc. Per inserire.

Cursore cursore semplice in vi: left = h, down = j, up = k, right = l http://linuxmeister.net/vi/vi-Summary.jpg

Ho aggiunto tutte le voci necessarie per farlo funzionare su: http://linuxmeister.net/Notes/bashrc-simple.html

Quindi, sulla base delle informazioni molto utili sopra, sono stato in grado di usare "history" e RICHIAMO una riga da "history", SENZA eseguirla. (GRAZIE PER QUEL POST!)

se shopt è elencato e histverify è "off" a! eseguirà immediatamente,

se hai aggiunto al tuo .bashrc o hai digitato: shopt -s histverify , quindi a! consente una modifica, ad esempio:

history
    1  more .bashrc
    2  history
    3  shopt
    4  . ./.bashrc
    5  shopt | grep hist
    6  history
    7  alias
    8  history
    9  shopt
   10  history

->! 5

quando premo! 5 appare il seguente comando, ma NON viene eseguito

### se histverify è "on".

shopt | grep hist
cmdhist         on
histappend      on
histreedit      off
histverify      on
lithist         off

Ricorda che Linus e Richard hanno creato strumenti Linux e GNU per sfruttare UNIX. L'editor vi (creato da Bill Joy) è uno dei migliori strumenti da padroneggiare come su OGNI distribuzione di UNIX e Linux.

Tutti gli altri editor della riga di comando devono essere caricati e richiedono software aggiuntivo. Usare una GUI in Linux (oltre a Firefox, Thunderbird e OpenOffice) è come rimorchiare Diesel 4x4 con un Maggiolino VW del 1968 ... funzionerà, ma sicuramente non ha alcun senso.

Ricorda cosa ha detto Kernigan a proposito di una GUI, "quello che vedi è tutto ciò che ottieni".


-1
echo !number

quindi premi la freccia su, rimuovi la parola echoe modifica il resto; premere Invio per eseguire.

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.