Przepraszam, ten tytuł nie jest najbardziej elegancki, jaki kiedykolwiek wymyśliłem.
Ale zakładam, że wiele osób się nad tym zastanawiało, a moje pytanie może być dupkiem ... mogę tylko powiedzieć, że nie znalazłem.
Kiedy mówię „przewijanie” w górę, mam na myśli użycie klawisza „strzałka w górę” na klawiaturze, który oczywiście przewija cię w górę w historii, zaczynając od ostatniego polecenia.
Więc możesz znaleźć polecenie może 30 poleceń z powrotem ... i uruchom je. A następnie chcesz uruchomić polecenie, które pierwotnie pojawiło się po nim ... czy jest to szybki sposób na zrobienie tego? Lub jak robią to biegli w BASH?
źródło
vi
edycji linii (włączone za pomocąset -o vi
) czyemacs
? PonieważCtrl-O
, o ile wiem, nie będzie działać z tym pierwszym.bind "\C-o":operate-and-get-next
(lub dodać wszystko pobind
do~/.inputrc
)Odpowiedź Jona Reinholda jest świetna, ale zaproponuję o wiele potężniejsze rozwiązanie. Mam również komentarz na temat gotcha w odpowiedzi Jona, ale nie mam wystarczającej reputacji, aby móc komentować bezpośrednio, więc @Jon Reinhold, jeśli to czytasz, proszę skieruj mój komentarz poniżej.
Bash zawiera polecenie
fc
, które przyjmuje jako parametry numery linii listy historii bash. Następnie otwiera domyślny edytor z tymi wierszami jako tekstem. W tym momencie możesz opcjonalnie edytować linie. Następnie, po wyjściu z edytora, bash wykonuje te linie!Przykładem zmiany, którą możesz chcieć wprowadzić, jest dołączenie do wszystkich wierszy, z wyjątkiem ostatniego, czegoś takiego jak „; czytaj -p„ next ... ”. Spowoduje to, że bash wykona każdą linię i wyświetli monit przed kontynuowaniem.
Komentarz dla Jona Reinholda: Świetna odpowiedź, ale powinieneś ją zakwalifikować, ponieważ jeśli użytkownik ustawił zmienną bash HISTCONTROL do włączenia
erasedups
, to po wykonaniuC-o
użytkownik będzie zdezorientowany, ponieważ zamiast oczekiwanej następnej komendy w historii, następna komenda zostanie wyświetlone. Wynika to z faktu, że bash usunął pierwotne wystąpienie wykonanego polecenia, a zatem wszystkie polecenia przesunęły się w górę o jedną linię, tj. do jednego niższego numeru indeksu na liście historii.źródło
fc
poprzedza zarówno siebie, jakCtl-o
ibash
siebie. (W przeciwieństwie do tej odpowiedzi jest on również mniej przydatny).erasedups
jest oczywiście błąd bashowy ( mogło istnieć postanowienie na taką sytuację). Ale dobrze wiedzieć.Innym sposobem na osiągnięcie pożądanego zachowania byłoby zapoznanie się ze skrótami readash bash (z których CTRL- ojak sądzę) i przeszukiwanie historii bash.
Wyszukiwanie historii
CTRL- rzabierze Cię do wyszukiwania historii poleceń bash, gdzie możesz zacząć wpisywać szukane polecenie, a bash automatycznie wykona polecenie za ciebie. Funkcja autouzupełniania jest naprawdę niezła. Gdy polecenie, które chcesz uruchomić, znajduje się w wierszu wprowadzania, możesz je ENTERuruchomić lub nacisnąć CTRL-, eaby przesunąć kursor na koniec wiersza polecenia i wyjść z trybu wyszukiwania historii.
Fajne z CTRL- ew tym momencie jest to, że bufor historii jest ustawiony kontekstowo do tego polecenia. Następne i poprzednie polecenia są teraz uruchamiane tuż przed i za wierszem, który dla ciebie szukało wyszukiwanie historii. Możesz nacisnąć strzałki w górę lub w dół i złapać następne polecenie.
Wyszukiwanie historii jest bardzo potężne i jest świetnym sposobem na uniknięcie używania strzałki w górę, aby w pierwszej kolejności wrócić do polecenia. Szybkie wyszukiwanie historii może zaoszczędzić dużo czasu na ręcznym przeszukiwaniu historii, a następnie możesz kontynuować CTRL- ojak Jon wskazał powyżej.
Readline Short Cuts
Jeśli chcesz poprawić swój ogólny bash-fu, polecam wypróbowanie skrótów readline dla klawiszy strzałek. Może się okazać, że są one wygodniejsze i pozwalają zwiększyć szybkość pisania, ale oczywiście YMMV. Oto kilka innych:
Te skróty do odczytu (wraz z CTRL- apoczątkiem linii i CTRL- ekońcem linii) zwiększą prędkość i wydajność na linii poleceń imo.
źródło