Я набираю команду, вспоминаю, что мне нужно что-то проверить, если я нажимаю 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.