Как захватить пользовательский ввод "Подтвердить сохранение"?

Я использую эту команду, чтобы переименовать текущий файл и удалить файл со старым именем:
:exe "confirm sav ".variable

Variable указывается в un inputdialog().

Как я могу захватить confirm saveas пользовательский ввод (перезаписать да или нет), чтобы сделать это:
если userinput == 'нет' -> ничего не делать
если userinput == 'yes' -> удалить старый файл и буфер: call delete(expand('#')) | bd#

Надеюсь, я ясно дал понять.

2 ответа

Решение

Вы не можете напрямую получить доступ к результату :confirm, но эффект от :saveas можно наблюдать: если буфер не 'modified' больше, экономия была сделана. Для обработки неизмененных исходных буферов исходное состояние должно быть сохранено и восстановлено.

let save_modified = &l:modified
setlocal modified
exe "confirm sav ".variable
if !&l:modified
    " User confirmed.
    call delete(expand('#')) | bd#
else
    " User canceled; restore original state.
    let &l:modified = save_modified
endif

Примечание: есть плагин для переименования: переименовать плагин

confirm() Функция - это то, что вы ищете.

:h confirm() проверить подробное описание аргумента и примеры.

Другие вопросы по тегам