Jak mogę przywołać numerowane polecenie historii do edycji?

17

Często szukam zmian za pomocą history | grep 'string'

W mojej historii pojawia się lista poleceń wraz z numerem wiersza historii), np

history | grep 'git'

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

Teraz mogę przywołać i wykonać polecenie za jednym razem !nnn, na przykład:

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

Moje pytanie brzmi: w jaki sposób mogę przywołać numerowane polecenie historii i pozostać w wierszu poleceń w celu edycji i nie wykonywać go od razu „tak jak jest”, w ten sposób !, że mogę zmienić kilka rzeczy, które wymagają powrotu?

Michael Durrant
źródło

Odpowiedzi:

12

Od tego czasu przyjąłem inne podejście do tego - używanie ![line-number]:p

To wypisuje instrukcję i dodaje ją do historii, ale tak naprawdę nie wykonuje jej. Następnie wykonuję strzałkę w górę i zmieniam ją według potrzeb.

Łączę to z moim hgaliasem ( alias hg='history | grep '), aby przywoływać polecenia historii oparte na jakimś tekście.

Przykład:

$ 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

Używam tego oprócz ctrl- r(Search odwrotnej historii), ponieważ czasami wolę zobaczyć natychmiastowe listę wszystkich możliwości na dany ciąg, a nie tylko wyjście na 1 linię, która ctrl- rpokazy. Potem hg [string]zrobiłbym tak, ![line-number]search_stringjak hg checkoutpokazano powyżej.

Michael Durrant
źródło
8

Jeśli ustawisz histverify opcję , np

shopt -s histverify

wszystkie zmiany historii są wprowadzane do edycji zamiast natychmiastowego wykonania. Będziesz musiał nacisnąć Enterdwukrotnie zamiast raz po wpisaniu, !755aby wykonać polecenie.

Możesz przesunąć dowolny tekst na listę historii za pomocą history -s. Połącz to z, fc -nlaby wyświetlić konkretny wpis historii.

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

następnie naciśnij, Upaby przywołać najnowszy wpis historii.

Gilles „SO- przestań być zły”
źródło
6

Możesz przeszukiwać historię za pomocą Ctrl+ R. Jeśli wpis historii jest długi, użyj myszy (a nie klawiatury, która zatrzymuje wyszukiwanie), aby skopiować i wkleić część polecenia, aby ponownie edytować.

Jak skomentował @rijsg, możesz następnie użyć strzałek (lewej i prawej) lub równoważnych klawiszy, aby zatrzymać wyszukiwanie i rozpocząć edycję.

Zelda
źródło
2
Dowolny klawisz strzałki lub równoważne polecenie ( Ctrl-ana przykład) zatrzyma wyszukiwanie, pozostawiając bieżący wpis historii w wierszu polecenia, bez wykonywania go. To może, ale nie wystarczy, w zależności od tego, czego chce @Michael.
njsg
2

Jeśli skonfigurujesz plik .bashrc do korzystania z edytora vi w wierszu poleceń, spowoduje to, że edycja wiersza poleceń będzie o wiele mniej skomplikowana.

Po pierwsze, po włączeniu „set -o vi” możesz po prostu nacisnąć „<esc> k” , a następnie wcisnąć „k” , aby przejść do pliku historii tak, jakby był, jeśli przejdziesz obok wpisu, użyj „j” zejść na dół .

UWAGA: w przypadku korzystania z vi istnieją dwa tryby: polecenie i edycja, aby przejść do trybu polecenia, naciśnij klawisz ESCAPE RAZ RAZ, następnie a, A, i, I itd., Aby wstawić.

Prosty pad kursora w vi: lewo = h, dół = j, góra = k, prawo = l http://linuxmeister.net/vi/vi-Summary.jpg

Dodałem wszystkie wpisy potrzebne do działania tej strony: http://linuxmeister.net/Notes/bashrc-simple.html

Tak więc, w oparciu o bardzo pomocne informacje powyżej, byłem w stanie użyć „historii” i PRZYWOŁOWAĆ wiersz z „historii”, BEZ jego wykonania. (DZIĘKUJEMY ZA TEN POST!)

jeśli shopt jest na liście, a histverify jest wyłączony! wykona natychmiast,

jeśli dodałeś do swojego .bashrc lub wpisałeś: shopt -s histverify , to a! umożliwia edycję, na przykład:

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

kiedy uderzę! 5 pojawi się następujące polecenie, ale NIE zostanie wykonane

### jeśli histverify jest „włączony”.

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

Pamiętaj, że Linus i Richard stworzyli narzędzia Linux i GNU, aby skorzystać z systemu UNIX. Edytor vi (stworzony przez Billa Joya) jest jednym z najlepszych narzędzi do opanowania, tak jak w KAŻDEJ dystrybucji systemów UNIX i Linux.

Wszystkie pozostałe edytory wiersza poleceń muszą zostać załadowane i wymagają dodatkowego oprogramowania. Korzystanie z GUI w Linuksie (innym niż Firefox, Thunderbird i OpenOffice) jest jak holowanie twojego Diesel 4x4 za pomocą VW Beetle z 1968 roku ... będzie działać, ale na pewno nie ma sensu.

Pamiętaj, co Kernigan powiedział o GUI: „to, co widzisz, to wszystko, co dostajesz”.

LinuxMeister
źródło
-1
echo !number

następnie naciśnij strzałkę w górę, usuń słowo echoi edytuj resztę; naciśnij enter, aby wykonać.

Andrzej
źródło