Я пытаюсь улучшить код из этого ответа, чтобы запросить подтверждение перед созданием отсутствующего каталога, вот что я пишу:
function! CreateDirectoryAskConfirmation(path)
if !isdirectory(a:path)
echohl Question
echo "Create directory " . a:path . "?"
echohl None
let response = nr2char(getchar())
if response ==? "y"
call mkdir(a:path, "p")
endif
endif
endfunction
autocmd BufWritePre * call CreateDirectoryAskConfirmation(expand("<afile>:p:h"))
Я упускаю одну вещь: когда я не нажимаю y
на подсказку, я бы хотел, чтобы Vim прервал запись, чтобы я не получил ошибку E212: Can't open file for writing
и мне не нужно нажимать другую клавишу, чтобы сообщение об ошибке исчезло. Есть способ добиться этого?
:
никогда не требуется для команд.silent
чтобы вы не получили сообщение, если вы не используете этоautogroup
. Я также исправил еще одну проблему, которую заметил::w another_name
не работал (не работает).write
будет просто записывать текущее имя файла (как при вводе:write
) и:write another_filename
не будет работать (оно все равно будет использовать исходное имя файла).bufype
настройку, чтобы получить тип буфера. Не стесняйтесь редактировать пост с исправлением (или, если вы этого не сделаете, я буду на следующей неделе).