ZSH - generować całą historię?

37

Ostatnio przeszedłem z bash na zsh. W bash, jednym ze sposobów (oprócz wyszukiwania rekurencyjnego), w którym znajdowałem wcześniej uruchomione polecenia było history | grep whatever, gdzie whateverjest kawałek polecenia, które pamiętam.

W Zsh to nie działa. historyzwraca tylko kilka elementów, mimo że mój .zsh_historyplik zawiera wiele wpisów, do których skonfigurowałem go.

Jak mogę wydrukować całą historię, odpowiednią do wyszukiwania grep?

Nathan Long
źródło

Odpowiedzi:

48

Historia akceptuje zakres wpisów zsh jako [first] [last]argumenty, więc aby je wszystkie uruchomić history 0.

Aby uzyskać pomoc zsh (przynajmniej z umysłem), wpisz Alt-hpolecenie historii, a to wyświetli pomoc dla wbudowanych.

Kyle Brandt
źródło
3
Świetny! Jest to dla mnie irytujące ustawienie domyślne, więc dodaję to do mojego pliku aliasów:alias history="history 0"
Nathan Long
7
To nie ma znaczenia, ale lista historii zaczyna się od 1, a nie od 0.
ggustafsson,
2
Sam używam tego aliasu:alias h='history 1 | grep'
Harald Nordgren,
3
Wydaje mi się, że to nie działa: moja ~/.zsh_historyma 10066 linii, ale history 0(lub jej odpowiednik fc -l 0) drukuje tylko 4999 linii.
jayhendren
2
Do history 1 | grepludzi, mam nadzieję, że wiesz o ctrl+r- najlepszy trick / skrót w historii!
Emil Vatai
9

Przyjęta odpowiedź jest poprawna, ale warto zauważyć, że nie trzeba wywoływać zewnętrznego greppliku binarnego, aby przeprowadzić wyszukiwanie, ponieważ ta umiejętność jest włączona. Mam tę funkcję zdefiniowaną w moim .zshrc:

histsearch() { fc -lim "*$@*" 1 }

Uwagi:

  • fcjest wbudowanym zsh, który kontroluje interaktywną historię. historyjest równoważne z fc -l.

  • -mFlag wymaga wzorzec, który musi być cytowany.

  • -iFlaga dodaje znacznik czasu.

  • fcma wiele innych sztuczek (np. ograniczenie wyszukiwania do historii wewnętrznej dla bieżącej sesji). Zobacz zshbuiltins(1)stronę podręcznika lub oficjalną dokumentację .

wjv
źródło
Jeszcze lepiej jest użyć wzoru „* $ @ *” (zwróć uwagę na dodatkowe gwiazdki) zamiast „$ @”, ponieważ ten ostatni daje tylko dokładne dopasowania.
Piotr Dobrogost
1
Masz całkowitą rację, @PiotrDobrogost! Nie jestem pewien, jak udało mi się przesłać tę odpowiedź w stanie, w jakim to zrobiłem - domyślam się, że musiałem wpisać tę funkcję z pamięci. Na obecnym etapie nie jest to zbyt użyteczne, więc zredaguję odpowiedź, aby uwzględnić gwiazdki.
wjv
3

Spójrz na FZF . Pomaga nie tylko znaleźć „cząstki czegokolwiek” w historii twojej powłoki, ale także w innych interesujących miejscach, np. Historii przeglądarki, historii katalogów itp.

fzf to wyszukiwarka rozmytych wierszy poleceń. Oznacza to, że możesz wyszukiwać cząstki lub frakcje tego, czego szukasz, i wyświetla kolekcję dopasowań, które możesz stale udoskonalać. To naprawdę zmieniacz gier.

Strona główna autora zawiera wiele przykładowych przykładów.

Daniel Schaffrath
źródło
Rozważ dodanie odniesienia do tej odpowiedzi na poparcie tego, co podałeś.
Pimp Juice IT,
Witamy w Super User! Przeczytaj Jak polecać oprogramowanie, aby uzyskać minimalne wymagane informacje i sugestie, jak polecać oprogramowanie superużytkownikowi. Aby Twoja odpowiedź była użyteczna, nawet jeśli podany link (y) się zepsuje, te dane powinny być edytowane w odpowiedzi.
Mówię: Przywróć Monikę