Wie kann ich einen nummerierten Verlaufsbefehl zum Bearbeiten abrufen?

17

Ich suche häufig nach Änderungen mit history | grep 'string'

Ich erhalte eine Liste der Befehle in meinem Verlauf, zusammen mit der Nummer der Verlaufszeile, z

history | grep 'git'

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

Ich kann jetzt einen Befehl auf einmal aufrufen und ausführen !nnn, zum Beispiel mit:

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

Meine Frage lautet: Wie kann ich einen nummerierten Verlaufsbefehl abrufen und in der Befehlszeile bleiben, um ihn zu bearbeiten, und ihn nicht sofort so ausführen, wie er ist !, damit ich ein paar Dinge ändern kann, die Presing Return betreffen?

Michael Durrant
quelle

Antworten:

12

Ich habe seitdem einen anderen Ansatz gewählt - mit ![line-number]:p

Dies druckt die Anweisung aus und fügt sie dem Verlauf hinzu, führt sie jedoch nicht aus. Ich mache dann Pfeil nach oben und ändere es wie gewünscht.

Ich kombiniere dies mit meinem hgAlias ​​( alias hg='history | grep '), um Verlaufsbefehle basierend auf Text abzurufen.

Beispiel:

$ 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

Ich benutze dies zusätzlich zu ctrl- r(Reverse History Search), weil ich manchmal lieber eine sofortige Liste aller Möglichkeiten für eine bestimmte Zeichenfolge sehen möchte, als nur die Ausgabe in einer Zeile, die ctrl- ranzeigt. Danach hg [string]würde ich dann ![line-number]search_stringwie hg checkoutoben gezeigt vorgehen.

Michael Durrant
quelle
8

Wenn Sie die histverify Option einstellen , z

shopt -s histverify

Dann werden alle Ersetzungen der Historie zur Bearbeitung aufgerufen, anstatt sofort ausgeführt zu werden. Sie müssten dann Enternach der Eingabe zweimal statt einmal drücken !755, um den Befehl auszuführen.

Sie können mit beliebigen Text in die Verlaufsliste verschieben history -s. Kombinieren Sie dies mit, fc -nlum einen bestimmten Verlaufseintrag aufzulisten.

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

Drücken Sie dann Up, um den aktuellsten Verlaufseintrag abzurufen.

Gilles 'SO - hör auf böse zu sein'
quelle
6

Mit Ctrl+ können Sie die Historie durchsuchen R. Wenn der Verlaufseintrag lang ist, verwenden Sie die Maus (nicht die Tastatur, die die Suche anhält), um einen Teil des Befehls zum erneuten Bearbeiten zu kopieren und einzufügen.

Wie von @rijsg kommentiert, können Sie dann die Suche mit den Pfeiltasten (links und rechts) oder den entsprechenden Tasten beenden und mit der Bearbeitung beginnen.

Zelda
quelle
2
Eine Pfeiltaste oder ein entsprechender Befehl ( Ctrl-azum Beispiel) stoppt die Suche und lässt den aktuellen Verlaufseintrag in der Eingabeaufforderung, ohne ihn auszuführen. Dies kann reichen oder auch nicht, je nachdem, was @Michael möchte.
njsg
2

Wenn Sie Ihre .bashrc-Datei so konfigurieren, dass der vi-Editor in der Befehlszeile verwendet wird, werden die Änderungen in der Befehlszeile wesentlich weniger komplex.

Erstens, sobald "set -o vi" aktiviert ist, können Sie einfach "<esc> k" drücken und dann "k" drücken , um die Verlaufsdatei sozusagen aufzurufen. Wenn Sie an einem Eintrag vorbeigehen, verwenden Sie "j". untergehen .

HINWEIS: Wenn Sie vi verwenden, gibt es zwei Modi: Befehlen und Bearbeiten, um in den Befehlsmodus zu gelangen. Drücken Sie EINMAL die ESCAPE-TASTE, und fügen Sie dann a, A, i, I usw. ein.

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

Ich habe alle Einträge hinzugefügt, die für diese Funktion erforderlich sind: http://linuxmeister.net/Notes/bashrc-simple.html

Auf der Grundlage der obigen sehr hilfreichen Informationen konnte ich "history" verwenden und eine Zeile aus "history" abrufen, OHNE sie auszuführen. (DANKE FÜR DIESEN POST!)

wenn shopt aufgelistet ist und histverify "off" ist a! wird sofort AUSFÜHREN,

Wenn Sie Ihrem .bashrc hinzugefügt oder Folgendes eingegeben haben: shopt -s histverify , dann a! ermöglicht eine Bearbeitung, zum Beispiel:

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

Wenn ich! 5 drücke, erscheint der folgende Befehl, der jedoch NICHT ausgeführt wird

### wenn histverify "on" ist.

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

Denken Sie daran, dass Linus und Richard Linux- und GNU-Tools entwickelt haben, um die Vorteile von UNIX zu nutzen. Der vi-Editor (erstellt von Bill Joy) ist eines der besten Werkzeuge, die Sie beherrschen müssen, da er auf JEDER Distribution von UNIX und Linux verfügbar ist.

Alle anderen Befehlszeileneditoren müssen geladen werden und erfordern zusätzliche Software. Die Verwendung einer grafischen Benutzeroberfläche unter Linux (außer Firefox, Thunderbird und OpenOffice) ist wie das Abschleppen Ihres Diesel-Geländewagens mit einem VW-Käfer von 1968 ... es wird funktionieren, aber es ergibt keinen Sinn.

Denken Sie daran, was Kernigan über eine GUI gesagt hat: "Was Sie sehen, ist alles, was Sie bekommen."

LinuxMeister
quelle
-1
echo !number

Drücken Sie dann den Aufwärtspfeil, entfernen Sie das Wort echound bearbeiten Sie den Rest. Drücken Sie die Eingabetaste, um auszuführen.

Andrzej
quelle