Как сохранить текущую команду на zsh?

Как сохранить текущую команду на zsh?

Я набираю команду, вспоминаю, что мне нужно что-то проверить, если я нажимаю Ctrl+, Uкоманда исчезает, и я могу набрать что-то другое, но тогда набираемая мной команда отсутствует в истории.

Есть ли способ восстановить эту команду или другое сочетание клавиш, которое я могу нажать, чтобы сохранить где-нибудь команду?

решение1

Взгляните на push-lineкоманду ZLE. Эта команда помещает текущее содержимое строки в стек буфера и очищает строку. Затем вы можете ввести другую команду, и когда ZLE снова запустится, строка будет вытолкнута из стека буфера в буфер строки.

prompt@world$ cp abc /mnt/usr/bin       # The user presses Esc-q
prompt@world$                           # The line is cleared
prompt@world$ mount -v /dev/sdb1 /mnt   # And the user can enter another command
mount: /dev/sdb1 mounted on /mnt
prompt@world$ cp abc /mnt/usr/bin
# The first command is popped off of the stack
#  as soon as ZLE comes back.

По умолчанию эта команда привязана к Alt/ Escqв режиме emacs. Вы можете привязать эту команду к другой клавише с помощью bindkeyкоманды. Например, чтобы привязать ее к Alt/ Escv, добавьте bindkey '^[V' push-lineк вашему zshrc.

решение2

Ctrl+ Yвставит последний вырезанный элемент (с Ctrl+ U, Ctrl+ K, Ctrl+ Wи т. д.).

решение3

Вы ищетеpush-lineкоманда, которая по умолчанию привязана к Ctrl+ Qи Esc Q. Эта команда очищает ввод и позволяет вам ввести другую команду; после того, как вы выполнили или отменили эту команду, предыдущая команда возвращается для редактирования.

С многострочной командой push-lineочищает только текущую строку, а остальные строки сохраняет во входном буфере. Есть еще одна командаpush-inputкоторый очищает весь входной буфер, не привязанный по умолчанию ни к одной клавише.

Я использую обертку вокруг этой команды. Я набираю Ctrl+ Z, чтобы «приостановить» команду, которую я набираю, и набираю другую команду. После того, как я выполнил эту команду (или прервал ее с помощью Ctrl+ C), приостановленная команда возвращается для редактирования (даже запоминая позицию курсора). В качестве дополнительного удобства, если командная строка пуста, когда я набираю Ctrl+ Z, клавиша bgвместо этого вызывает встроенную (поэтому двойной Ctrl+ Zотправляет запущенную команду непосредственно в фоновый режим).

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

Несложный метод, работающий в любой оболочке, — добавить a #в начало текущей строки и нажать Enter.

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