Как повторить текущий введенный параметр в zsh?

Как повторить текущий введенный параметр в zsh?

Иногда нам просто нужно ввести немного другое имя при использовании mv/cp/convert. Например,

convert IMG-long-number.jpg  IMG-long-number.png

Как мне повторить IMG-long-number.jpg перед тем, как набирать IMG-long-number.png, чтобы мне пришлось внести лишь небольшие изменения?

Это похоже наКак повторить текущий введенный параметр в консоли bash?но для zsh/zle.

решение1

!#$<Tab>У меня работает. Дано:

$ echo a

Ввод !#$с последующим нажатием Tabрасширяет !#$до a. Дополнение Tab также перечисляет другие варианты, если вы попробуете выполнить операцию с ::

$ echo a !#$:
&  -- repeat substitution
A  -- absolute path resolving symbolic links
Q  -- strip quotes
a  -- absolute path
c  -- PATH search for command
e  -- leave only extension
g  -- globally apply s or &
h  -- head - strip trailing path element
l  -- lower case all words
q  -- quote to escape further substitutions
r  -- root - strip suffix
s  -- substitute string
t  -- tail - strip directories
u  -- upper case all words

решение2

Альтернатива, которую следует иметь в виду: этого делать не нужно.

После использования завершения для получения

преобразовать IMG-длинный-номер.jpg
просто отредактируйте это в

преобразовать IMG-длинное-число.{jpg,png}

решение3

Я бы использовал Ctrl+Alt+_, что копирует предыдущее слово ( copy-prev-wordвиджет). После копирования вы можете использовать Backspaceдля редактирования расширения копии.

Или используйте Ctrl+Wдля удаления целиком. По умолчанию Ctrl+Wудаляет целые слова (определяются как alnums+$WORDCHARS), но вы можете изменить поведение по требованию с помощью виджета select-word-style.

В ~/.zshrc:

autoload select-word-style
zle -N select-word-style
bindkey '\eW' select-word-style

Затем вы можете выбрать другойстиль словас Alt+Shift+W. Вы можете использовать bashстиль слова (только слова и числа) здесь (ссылка на то, как bashвиджеты словКроме какCtrl+Wнравится Alt+B, Alt+D... рассмотретьслова).

решение4

Похоже на то, что предложил @muru - !#$<TAB>. Но я также сделал привязки вроде этой в моем .zshrc :

bindkey -s "^[," "!#\$^I"

Таким образом, нажатие Esc«запятой» сделает это за вас, аналогично тому, как Escнажатие «точки» вернет вам последний аргумент из предыдущей команды.

Связанный контент