Запустите команду CommandTFlush при записи нового файла - PullRequest
6 голосов
/ 15 августа 2010

Я пытаюсь заставить 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 ]

17 голосов
/ 26 апреля 2011

Вот мое решение.Он запускает CommandTFlush всякий раз, когда файл записывается, а также всякий раз, когда окно Vim получает фокус.Это полезно, когда вы создаете файлы вне vim - например, переключаясь между ветками в вашей системе контроля версий.Новые файлы будут доступны в CommandT сразу после повторного ввода Vim.

augroup CommandTExtension
  autocmd!
  autocmd FocusGained * CommandTFlush
  autocmd BufWritePost * CommandTFlush
augroup END
2 голосов
/ 15 августа 2010
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

Это реализация вашего второго предложения.

...