33

Я недавно перешел с bash на zsh. В bash единственным способом (кроме рекурсивного поиска), который я использовал для поиска ранее запущенных команд, была history | grep whatever , где whatever была команда, которую я помню.

В Zsh это не работает. history возвращает только несколько элементов, хотя мой файл .zsh_history содержит много записей, которые я настроил для этого.

Как вывести всю мою историю, подходящую для поиска с помощью grep?

3 ответа3

37

History принимает диапазон в записях zsh в качестве [first] [last] аргументов, поэтому, чтобы получить их все, запустите history 0 .

Чтобы получить помощь по zsh (по крайней мере, с умом), наберите Alt-h над командой history, и это вызовет справку для встроенных модулей.

6

Принятый ответ правильный, но стоит отметить, что вам не нужно вызывать внешний двоичный файл grep для выполнения поиска, поскольку эта способность запечена. У меня есть эта функция, определенная в моем .zshrc:

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

Заметки:

  • fc - это встроенная в Zsh, которая управляет интерактивной историей. history эквивалентна fc -l .

  • Флаг -m требует шаблона, который должен быть заключен в кавычки.

  • Флаг -i добавляет метку времени.

  • fc есть еще много хитростей (например, ограничение поиска внутренней историей текущего сеанса). См. Справочную страницу zshbuiltins(1) или официальную документацию .

1

Посмотрите на FZF. Это помогает не только найти "что-либо" в истории вашей оболочки, но и в других интересных местах, например, в истории браузера, в истории каталогов и т.д.

fzf - нечеткий искатель командной строки. Это означает, что вы можете искать частицы или фракции того, что вы ищете, и он будет отображать коллекцию совпадений, которые вы можете постоянно улучшать. Это действительно изменит правила игры.

Домашняя страница автора содержит ряд иллюстративных примеров.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .