Как я могу использовать !! в псевдониме 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 } 
  • Отсутствие выделения zsh-синтаксиса в tmux
  • Что означает: $ {param: = значение} означает?
  • Как запрограммировать передачу сигнала разрыва (Magic SysRq) через последовательный терминал
  • Показать старые или более старые элементы истории с помощью команды history в zsh
  • Связанные с движением движения команды tput в zsh: можно ли настроить «четкое» поведение?
  • Установки завершения zsh (autojump) - Как их использовать?
  • Как установить bash для запуска * .exe с моно?
  • XTerm не обновляет изменения vim должным образом
  • ESC-q не работает в tmux с zsh
  • iterm-синхронизация сеансов по новым вкладкам
  • Получить zsh, чтобы сообщить каталог emacs
  • Почему не работает: while true; do "$ my_command"; сон 1; сделанный
  • Interesting Posts

    Поиск отлично работает в командной строке, но не работает в скрипте

    Как совместить содержимое двух файлов с одинаковым значением в столбце?

    Может ли rsync использоваться для возобновления передачи после других способов передачи / загрузки?

    Конфигурация Nginx, если

    консоль autologin как root на fedora

    Проблемы с ssh только при подключении с удаленного IP-адреса

    Как установить обозреватель i3wm на centos7

    В чем разница между разделом и физическим томом?

    Определение значений параметров ядра, связанных с sysctl.conf и sysctl.d

    Удалить опцию из включенного файла в PAM

    Как отключить кнопку моего CD / DVD-привода?

    wpa_supplicant хранить пароль как хэш (WPA-EAP с фазой2 = "auth = PAP")

    Печать оцениваемых приглашающих заполнителей для отображения

    Как проверить, выполняется ли задание в кластере с использованием имени задания (CentOS)

    Если каталог является файлом, могу ли я увидеть содержимое этого файла?

    Linux и Unix - лучшая ОС в мире.