Запустите команду CommandTFlush при записи нового файла
Я пытаюсь заставить Vim запускать команду 'CommandTFlush' всякий раз, когда новый файл записывается. Для тех, кто не использует плагин Command-T, команда "CommandTFlush" используется для перестройки индекса файлов в текущем каталоге.
Что я хочу сделать, это запустить команду после того, как файл будет записан на диск, так что CommandTFlush найдет файл и добавит его в индекс.
Я сам пытался написать функцию, но она либо не срабатывает, либо срабатывает слишком рано (до того, как файл будет записан, и весь смысл в том, чтобы добавить файл в индекс):
au! BufWritePre * ks| call NewFilesUpdatesCommandT()
function! NewFilesUpdatesCommandT()
let filename=@%
if !filereadable(filename)
CommandTFlush
endif
endfunction
Я подозреваю, что это можно решить, установив некоторое логическое значение var (isTheFileNew) в BufWritePre, а затем выполнить команду CommandTFlush в BufWritePost, если файл был только что создан, но я не могу понять синтаксис. Другим решением может быть установка / отмена обратного вызова BufWritePost из обратного вызова BufWritePre, если это возможно...
Может ли кто-нибудь помочь мне здесь?;)
2 ответа
augroup NFUCT
autocmd!
autocmd BufWritePre * call NFUCTset()
augroup END
function NFUCTset()
if !filereadable(expand('%'))
augroup NFUCT
autocmd BufWritePost * call NFUCT()
augroup END
endif
endfunction
function NFUCT()
augroup NFUCT
autocmd!
autocmd BufWritePre * call NFUCTset()
augroup END
CommandTFlush
endfunction
Это реализация вашего второго предложения.
Вот мое решение. Он запускает CommandTFlush всякий раз, когда файл записывается, а также всякий раз, когда окно Vim получает фокус. Это полезно, когда вы создаете файлы вне vim - например, переключаясь между ветками в вашей системе контроля версий. Новые файлы будут доступны в CommandT сразу после повторного входа в Vim.
augroup CommandTExtension
autocmd!
autocmd FocusGained * CommandTFlush
autocmd BufWritePost * CommandTFlush
augroup END