1

Я использую несколько экземпляров Vim. В настоящее время я использую функцию Bash

kv(){ a=($(pgrep vim)); kill ${a[@]}; }  

завершить все запущенные экземпляры vim. Недостатком этого метода является сохранение неустановленных файлов .swp везде, где vim был убит с несохраненными изменениями. Есть ли способ установить vim для сохранения его буферов, если ему посылают сигнал уничтожения?

2 ответа2

2

Вы не можете специально перехватить сигнал TERM, но вы можете "поймать" практически любой сигнал, который дает Vim возможность элегантно выйти. Смотрите пример в:

:help v:dying

Вы можете изменить команду :echo в примере на что-то вроде :wqall (см. « :help :wqall »).

Я не рекомендую это, хотя. Вы можете легко записать (перезаписать) файл, если не хотите, чтобы это произошло.

0

Я думаю, что невозможно сохранить буферы на VimLeave . Я пробовал код ниже

autocmd VimLeave * :!touch ~/logs/vim-leave
autocmd VimLeave * :wall

Этот код успешно touch файла, но не сохранил буферы. Я нашел эту тему в списке рассылки vim

Vim вызывает функцию deathtrap(), которая закрывает все буферы, а затем вызывает getout(), в которой обрабатываются все автокоманды (BufWinLeave, BufUnLoad, VimLeavePre и, наконец, VimLeave). Но к тому времени вы не можете больше сохранять буферы.

К тому времени Vim обрабатывает смертельный сигнал, он больше не будет вызывать небезопасные функции (например, выделять память), поэтому я сомневаюсь, что удастся добиться того, чего вы хотите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .