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?

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.


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ę .


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.


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ę
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.