Как я могу использовать !! в псевдониме zsh

Я пытаюсь создать псевдоним, который основывается на моей предыдущей команде.

Скажем, я бегу

ag foo

Посмотрев на список, я хочу использовать эти результаты в vim, поэтому я делаю

vim -q<(!! --vimgrep)

Псевдоним, который я хочу, это

alias edit-last='vim -q<(!! --vimgrep)'

Но я не могу использовать !! в моем псевдониме. Мне сложно найти информацию о том, что !! является встроенным псевдонимом

One Solution collect form web for “Как я могу использовать !! в псевдониме zsh”

!! это расширение истории . Первый ! начинает расширение истории; !! имеет обозначение события, означающее предыдущую команду.

Вы можете получить доступ к истории команд через встроенные функции fc и history и с помощью переменной history .

Поскольку --vimgrep имеет смысл только с ag , ваш псевдоним был бы более полезен, если бы он применялся к последней команде ag . Вы можете найти предыдущую команду ag следующим образом:

 ${${(M)history:#ag *}[1]} 

Кроме того, вам нужно ввести команду --vimgrep в команду.

 alias edit-last='vim -q<(eval "${${(M)history:#ag *}[1]} --vimgrep")' 

Последняя команда ag больше не имеет смысла, если вы изменили текущий каталог. Это трудно обнаружить. Вместо этого вы можете использовать белые списки приемлемых команд. Конечно, это не идеальный тест.

 edit-last () { local cmd setopt local_options extended_glob for cmd in $history; do case $cmd in ((ls|(cvs|git|hg|svn) status)(| *)) :;; ("ag "*) vim -q<(eval "$cmd --vimgrep"); return;; (edit-last) :;; (*) echo >&2 "The previous ag command is too old."; return 125;; esac done } 
  • Почему вырезать провал с bash, а не zsh?
  • pwd не задан правильно в запросе zsh
  • Как найти функцию zsh, связанную с виджетами zle?
  • Выберите пользовательский запрос zsh на основе того, какой эмулятор я использую
  • Как включить вывод скрипта в приглашение zsh
  • Лучше ли узнать местоположение скрипта, которое является частью модуля zprezto?
  • Что такое sourcing мой сценарий оболочки?
  • Как я могу заполнить -N числовой параметр?
  • Расширение скобки слева направо налево
  • zsh history: комментируйте опасные команды: `#`
  • сбой команды ожидания
  • Linux и Unix - лучшая ОС в мире.