27 lipca 2010

[CLI] Jak przyśpieszyć pracę z konsolą tekstową? Wystarczy znać odpowiedni skrót :)

wcześniej ten post miał tytuł  "Control + R: reverse-i-search", ale chyba nie był zbyt wymowny, więc go zmieniłem :)

Dzisiejszy post należeć będzie do cyklu "Ciekawostki dotyczące konsoli".

Nie jestem jakimś super wytrawnym użytkownikiem Linuksa. Sam na komputerze domowym mam postawionego Windowsa Xp i dobrze mi z tym. Nie mniej jednak z Linuksem do czynienia miałem nie raz, nie dwa. Do linuksowej konsoli natomiast przyzwyczaiłem się już tak bardzo, że moim nieodłącznym narzędziem pracy na komputerze z systemem Windows jest zawsze Cygwin.

Tym większe było moje zdziwienie, gdy raz spoglądając mojemu koledze przez ramie dostrzegłem jak w konsoli stosuje on skrót klawiszowy CTRL+R.



Zapewne setki razy zdarzało Ci się, ze chciałeś ponownie użyć jakiegoś polecenia, którego niedawno miałeś okazje już użyć w tej samej instancji konsoli. Dotychczas w takich sytuacjach z pomocą przychodził mi klawisz górnej strzałki, który wciskany sekwencyjnie potrafił przywołać na ekran polecenia z najdalszych czeluści historii naszej konsoli (no prawie :P). Problematyczne jednak jest odnajdywanie polecenia, którego mieliśmy okazje użyć 30 (lub więcej) poleceń temu.

Jak się okazuje, na takie okazje do dyspozycji mamy "wstecznie przeszukujące iteracyjne polecenie szukające" - wiem, tłumaczenie mogło by być lepsze :P.

Iteracyjne, tzn. aktualizujące wynik wyszukiwania każdorazowo po wpisaniu kolejnego znaku do wzorca wyszukiwania. Dużo gadania a zobaczycie, że cały mechanizm jest banalny w użyciu.

Na potrzeby przykładu załóżmy, ze w konsoli mieliśmy wcześniej okazje wpisać następujące polecenia:

ls
md5sum bin/realese/out 
make clean
make all
make install

Po wciśnięciu kombinacji klawiszy CTRL+R, konsola zostanie przełączona w tryb wyszukiwania i naszym oczom objawi się:

(reverse-i-search)`':

Załóżmy, że szukamy polecenia make clean. Po naciśnięciu klawisza, odpowiedni znak zostaje dopisany do wzorca wyszukiwania. Jeżeli wciśniemy np. "m", to zobaczymy:

(reverse-i-search)`m': make install

Wspomniałem wcześniej, że polecenie wywoływane poprzez omawiany dzisiaj skrót, "przeszukuje wstecznie". Dlatego najpierw zaproponowało ono frazę ostatnio używaną z tych pasujących do wzorca. Możemy przełączać się pomiędzy proponowanymi poleceniami w odwrotnej kolejności ich użycia również za pomocą skrótu CTRL+R. Zatem stosując jeszcze raz tą kombinację w tym przypadku otrzymalibyśmy:

(reverse-i-search)`m': make all

oczywiście w każdym momencie możemy dalej zawężać kryterium wyszukiwania. Tak więc po wpisaniu kolejnej litery, w tym wypadku "d" otrzymamy oczywiście:

(reverse-i-search)`md': md5sum

Jeżeli już znaleźliśmy polecenie, które nas interesowało, możemy nacisnąć ENTER by go użyć. UWAGA!!! Polecenie to zostanie od razu wklejone do konsoli oraz zaraz potem od razu odpalone. Jeżeli chcielibyśmy przed odpaleniem polecenie lekko zmodyfikować, to powinniśmy zamiast entera użyć klawisza ESC.


Resetowanie indeksu polecenia

jeżeli ktoś będzie chciał skorzystać z polecenia więcej niż raz, to może natknąć się na dziwną sytuację.

Uruchamiając polecenie i wpisując "ll" a następnie wciskając klawisz escape:

(reverse-i-search)`ll': make install 

Otrzymamy make install, gdyż jest to ostatnia komenda, która zawierała w sobie dwa kolejne znaki "ll"

Jeżeli jednak chcielibyśmy powtórzyć wyszukiwanie z takim samym wzorcem, to okaże się, że dostaniemy:

(reverse-i-search)`ll': make all

Sytuacja może wydawać się dziwna, gdyż kierunek wyszukiwania jest przecież wsteczny. Jak można to wyjaśnić?

Powiedzmy, że przed wyszukiwaniem index polecenia wskazywał na ostatnie polecenie, czyli make install

ls
md5sum bin/realese/out 
make clean
make all                 
make install             <---- indeks

To właśnie polecenie wskazywane przez indeks, będzie pierwszym poleceniem, które będzie zaproponowane (jeżeli tylko spełnia kryteria wyszukiwania).



Pierwsze wyszukiwanie zakończyliśmy, wychodząc z niego bez zatwierdzania wyszukanego polecenia. Na skutek naszych zabiegów indeks polecenia przesunął się na make all i teraz wygląda następująco.


ls
md5sum bin/realese/out 
make clean
make all                 <---- indeks
make install      


Dokładnie od tego miejsca będzie kontynuowane kolejne wyszukiwanie, jeżeli z poprzedniego wyszliśmy za pomocą klawisza ESC.


Jak sobie z tym radzić? Bardzo prosto, wystarczy zresetować to polecenie. Można to zrobić na co najmniej kilka sposobów.

Jednym z nich jest odpalenie skrótu CTRL+C w trybie wyszukiwania. Drugim sposobem jest natomiast wpisanie dowolnego polecenia w konsoli (np. ls, echo, czy pwd), co spowoduje zaktualizowanie historii konsoli i jednocześnie zresetuje indeks.

Mam nadzieję, że korzystanie z konsoli stanie się dla was od tej chwili jeszcze przyjemniejsze :)
Related Posts Plugin for WordPress, Blogger...

2 komentarze:

  1. Wielkie dzięki ;) Zawsze męczyłem się z cholernymi strzałkami.

    OdpowiedzUsuń
  2. Niech C oznacza Ctrl
    C-a - początek linii
    C-e - koniec linii
    C-k - usun tekst za kursorem

    OdpowiedzUsuń