Intereting Posts
разрешено разрешение на ошибку (publickey, keyboard-interactive) через ssh (scp) между linux TP-LINK Archer T2UH wifi fastroaming на Linux медленный или иногда не может подключаться к AP Получение сбоев rsync в случайном порядке Второй монитор не работает с драйверами nvidia Подключение к нескольким XServers Dell XPS 13 L321x не может возобновиться после приостановки Имеет ли kdenlive ограничение относительно работоспособного файла? Программа не может разрешить имя хоста, если она запущена перед первым успешным подключением к Интернету Прокладка команды через цветной фильтр рекурсивный mkdir Команда sftp с именем «\» в имени пользователя не работает Сообщение об ошибке: grub2 устаревает grub2 Невозможно определить разрешения на доступ к файлам Samba по мере необходимости. Сочетание текста по сплошным линиям с ключом? Как я могу сделать тип прерывания вывода файла и кодировку для всех типов файлов?

Как я могу использовать псевдоним расширения истории в Zsh?

Я хочу, чтобы это работало (для этого нужны extendedglob и histsubstpattern ):

 alias ri='^(#b)E(?)^E${(l:2::0:)$((match[1]+1))}' 

Но это не так:

 $ alias sss='^(#b)E(?)^E${(l:2::0:)$((match[1]+1))}' $ echo /Users/evar/Downloads/Video/Teenage_Mutant_Ninja_Turtles_2003_S02E01_DVDRip_30NAMA.mkv /Users/evar/Downloads/Video/Teenage_Mutant_Ninja_Turtles_2003_S02E01_DVDRip_30NAMA.mkv $ sss zsh: command not found: Pocket 

Я не против использовать функцию вместо псевдонима, но результат был тот же.

Я даже пытался export ss='^(#b)E(?)^E${(l:2::0:)$((match[1]+1))}' и затем делать $ss , но это Ошибка с zsh: command not found: ^(#b)E(?)^E${(l:2::0:)$((match[1]+1))} .

Использование eval '^(#b)E(?)^E${(l:2::0:)$((match[1]+1))}' также завершается ошибкой с zsh: command not found: Pocket .

Обновление: найдено связанных (возможно, дублирующих) вопросов:

Альтернатива bash `history -p` в zsh?

https://stackoverflow.com/questions/27494753/how-to-get-last-command-run-without-using

https://stackoverflow.com/questions/48696876/using-history-expansion-in-a-bash-alias-or-function

Вы не можете, расширение истории происходит перед расширением псевдонима или параметра.

Я лично ненавижу расширение истории и это первое, что я отключаю.

Здесь вместо наложения псевдонима истории я бы предложил создать виджет, который увеличивает число E слева от курсора:

 increment-episode() { emulate -L zsh setopt extendedglob LBUFFER=${LBUFFER/(#b)(*E)(<->)/$match[1]${(l:${#match[2]}::0:)$((match[2]+1))}} } zle -N increment-episode bindkey '\e+' increment-episode 

И затем, вы просто нажимаете Вверх, а затем Alt + +, и у вас есть визуальная обратная связь о том, что происходит на каждом этапе, и вы можете отменить / повторить / адаптировать по желанию, а не работать вслепую, как с расширением истории csh (функция из 70-х то ИМО имело смысл тогда, но не так много сейчас, когда у нас есть более быстрые и более функциональные терминалы и линейные редакторы).

Но если вы действительно хотите вслепую оценить код в предыдущей команде в истории с увеличением числа после E , вы можете сделать:

 rerun-with-next-episode() { emulate -L zsh setopt extendedglob local new new=${${history:0:1}/(#b)E(<->)/E${(l:${#match[1]}::0:)$((match[1]+1))}} # display it print -ru2 -- $new # put it on the history print -rs -- $new # evaluate it eval -- $new }