Как я могу использовать !! в псевдониме 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
  • перемещать файлы по шаблону с помощью zsh / zmv
  • Как выполнить обратный поиск истории в vi-режиме ZSH?
  • Могу ли я автоматически заполнять вкладку в zsh с регулярным выражением
  • Задание zsh для ssh сбивает имена хостов с локальными файлами
  • Экран: текущий каталог в заголовке (не как заголовок)
  • Как ввести несколько имен файлов с меньшим количеством штрихов
  • Как повторить виджет zle произвольное количество раз, когда открыто меню завершения?
  • Линия Shebang для «run with $ SHELL»
  • Bash - перемещать файлы в пронумерованные папки oneliner
  • Interesting Posts

    Объединение множественной замещения процесса

    Является ли моя версия SSH, OpenSSH или какой-либо другой садовой разновидности?

    Невозможно использовать модуль управления Yast CA из командной строки

    Не удалось подключиться к сети

    сбросить разрешения до значения по умолчанию

    Как использовать «less -F» без «-X», но все же отображать вывод, если только одна страница?

    Как Linux обрабатывает драйверы при смене систем?

    Пользователь x не может использовать эту программу (crontab)

    Установите пакеты usbutils после создания изображения в Yocto

    Используйте Lynx для загрузки источника страницы, на которой я сейчас нахожусь.

    Применение патчей в debian-пакетах – Часть 2

    Существуют ли какие-либо недостатки или опасности для загрузки всех правил брандмауэра до инициализации интерфейса обратной связи?

    Как настроить период кэширования bind9

    Файлы журналов для паники ядра в Arch Linux

    Только выводные печатные символы OpenWrt

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