Запустите команду commandtflush, когда новый файл написан
Вопрос
Я пытаюсь сделать VIM запустить команду «CommandTflush», когда новый файл является Writte. Для тех, которые не используют плагин Command-T, команда «CommandTflush» используется для восстановления индекса файлов в текущем каталоге.
То, что я хочу сделать, это запустить команду после того, как файл будет записан на диск, чтобы CommandTflush найдет файл и добавить его к этому индексу.
Я пробовал писать функцию самостоятельно, но либо она не огонь, либо она слишком рано срабатывает (до написания файла, и весь смысл - добавить файл в индекс):
au! BufWritePre * ks| call NewFilesUpdatesCommandT()
function! NewFilesUpdatesCommandT()
let filename=@%
if !filereadable(filename)
CommandTFlush
endif
endfunction
Я подозреваю, что его можно решить, установив некоторые логические вари (Isthefilenew) в bufwritepreprepre, а затем выполнить команду commandtflush в bufwritepost, если файл был только создан, но я не могу понять синтаксис. Другое решение может быть установлено / unsetting обратный вызов bufwritepost из callback bufwriteprepre, если это возможно ...
Кто-нибудь может помочь мне здесь? ;)
Решение
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