Я хочу выполнить system("cp /home/currently_opened_file.txt /somewhere/else")
, когда я выхожу из vim с :wq
. Для этого есть событие autocmd? Или любой другой способ сделать это?Событие autocmd для выполнения команды: wq - vimscript?
ответ
Update:
ОП отметил в комментариях, что это сочетание сделал именно то, что разыскивается (выполнить команду только на :wq
).
:autocmd BufWritePost * :autocmd VimLeave * :!cp % /somewhere/else
Оригинальный ответ:
Вы можете подключить BufWritePost
событие. Это запустит команду каждые, напишите не только, когда вы используете :wq
, чтобы оставить файл.
:autocmd BufWritePost * :!cp % /somewhere/else
Я полагаю, вы могли бы попробовать зацепить BufDelete
события (перед удалением буфера из списка буферов), но, похоже, что это будет проблематично, так как буфера используются для более редакторов файлов. Они также используются для таких вещей, как списки быстрого доступа, средство просмотра справки и т. Д.
Есть некоторые события, которые происходят, когда вы уходите, что может быть вариантом.
QuitPre when using :quit, before deciding whether to quit
VimLeavePre before exiting Vim, before writing the viminfo file
VimLeave before exiting Vim, after writing the viminfo file
Вы можете увидеть полный список, используя :help autocmd-events
.
Также обратите внимание, что вы можете ограничить то, что соответствует событию. Например, если вы хотите, чтобы это произошло для HTML-файлов и CSS-файлов, вы можете использовать это:
:autocmd QuitPre *.html,*.css :!cp % /somewhere/else
Я подозреваю, что вам нужно будет экспериментировать и посмотреть, что работает для вас.
Похоже, вам необходимо автоматически каскадировать запись файла в другое место. Мой DuplicateWrite plugin предоставляет удобные команды для их настройки. (Страница плагина содержит ссылки на альтернативные плагины.)
:DuplicateWrite /somewhere/else
Спасибо, это пригодится. –
Эй, Дэн. Он будет работать с ': w', и я не хочу этого, потому что он будет выполняться при каждом сохранении файла. Я хочу, чтобы событие работало только с ': wq'. Вы можете что-то предложить? –
Эй, спасибо большое. Я подключил 'BufWritePost' с помощью' VimLeave'. ': autocmd BufWritePost *: autocmd VimLeave *:! cp%/something/else' –
Прохладный, я положу это в ответ, так как он сделал именно то, что было после –