2016-09-21 8 views
1

В zsh, если случайно прервана команда (^ C), есть ли быстрый способ восстановить полную прерванную командную строку?Восстановить прерванную команду в zsh

Например,

PROMPT $ this is a long command ^C 
PROMPT $ [cursor here] 

Я хотел бы восстановить «это длинная команда» в позиции курсора.

ответ

2

Одно из решений состоит в

zle-line-init() { 
    if [[ -n $ZLE_LINE_ABORTED ]]; then 
    local savebuf="$BUFFER" savecur="$CURSOR" 
    BUFFER="$ZLE_LINE_ABORTED" 
    CURSOR="$#BUFFER" 
    zle split-undo 
    BUFFER="$savebuf" CURSOR="$savecur" 
    fi 
} 
zle -N zle-line-init 

Затем, в новой строке ввода, отменить (C-/ в режиме Emacs) даст прерванную линию.

ссылка: http://www.zsh.org/mla/users/2015/msg00652.html

Я добавил более подробное объяснение здесь: https://www.topbug.net/blog/2016/10/03/restore-the-previously-canceled-command-in-zsh/

0

Будет в $ ZLE_LINE_ABORTED.

Вы можете связать виджет специально, чтобы восстановить его. Или создайте для него событие отмены в zle-line-init (используя zle split-undo), чтобы его можно было восстановить, нажав кнопку отмены.

+0

Можете ли вы подробнее, пожалуйста? – xuhdev

+0

ОК, я думаю, решение находится здесь http://www.zsh.org/mla/users/2015/msg00652.html – xuhdev

 Смежные вопросы

  • Нет связанных вопросов^_^