1

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

Я использовал команду :au! CursorHoldI,CursorHold <buffer> silent! :update, которую я где-то нашел, и которая работает хорошо и эффективно: при 'updatetime' 4 секундам, он будет записывать файл на диск (только если он был изменен, следовательно :update , not :write) после курсора был в том же месте в течение 4 секунд, как в режиме вставки, так и в обычном режиме. (Хотя буфер имеет фокус в Vim. Есть ли у Вима фокус, а это тонкий момент. То есть, если Vim теряет фокус, файл все равно сохраняется через 4 секунды.)

Единственная проблема заключается в том, что если у меня есть другой файл, открытый с помощью :split , и щелкните там или нажмите Ctrl+W , k , то исходный файл не будет сохранен после 'updatetime' мс. Как это можно исправить?

2 ответа2

1

Команда :wall (более часто используемая сокращенно :wa), подобно :update , записывает файл, только если он сохранен. Разница в том, что он будет писать ВСЕ открытые файлы, а не только текущий.

Вы можете использовать тот же autocmd, что и у вас, и просто использовать :wa вместо :update .

0

Одним из решений является добавление события BufLeave , создавая такую команду:

:au! CursorHoldI,CursorHold,BufLeave <buffer> silent! :update

В моем .vimrc (он же _vimrc) я определил

noremap <C-S-F5> :au! CursorHoldI,CursorHold,BufLeave <buffer> silent! :update<CR>

Так что я нажимаю Ctrl+Shift+F5 в этом буфере, чтобы перевести его в режим автосохранения.

Примечание: silent не будет печатать никаких сообщений, а silent! также не будет печатать ошибки и игнорировать их. Это для буферов, которые не имеют связанных файлов, и файлов только для чтения.

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