Общий путь к тому, чтобы сделать вещи как это состоит в том, чтобы снабдить префиксом имя файла ./
.
zip foo.zip ./-foo
Эта техника работает большинство других утилит, которые принимают имя файла как аргумент.
!!
расширение истории . Первый !
начинает расширение истории; !!
имеет разработчик событий , что означает предыдущую команду.
Вы можете получить доступ к истории команды через
и истории
встроенных встроек и через истории
.
С - Vimgrep
имеет смысл только с Ag
, ваш псевдоним будет более полезен, если он применяется к последнему 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
}