2010-08-15 1 views
6

Я пытаюсь заставить Vim запустить команду CommandTFlush всякий раз, когда новый файл является писателем. Для тех, кто не использует плагин Command-T, команда «CommandTFlush» используется для перестройки индекса файлов в текущем каталоге.Запустите команду CommandTFlush при записи нового файла

Что я хочу сделать, это запустить команду после записи файла на диск, чтобы CommandTFlush нашел файл и добавил его в свой индекс.

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

au! BufWritePre * ks| call NewFilesUpdatesCommandT() 
function! NewFilesUpdatesCommandT() 
    let [email protected]% 
    if !filereadable(filename) 
     CommandTFlush 
    endif 
endfunction 

Я подозреваю, что это можно решить, установив в BufWritePre некоторый boolean var (isTheFileNew), а затем выполнив команду CommandTFlush в BufWritePost, если файл был только что создан, но я не могу понять синтаксис. Другим решением может быть установка/отключение обратного вызова BufWritePost из обратного вызова BufWritePre, если это возможно ...

Может ли кто-нибудь помочь мне здесь? ;)

+0

В чем заключается 'ks |' в начале вашей автокоманды? Не удается найти его в vim help. – ZyX

+0

Найдено. Почему вы хотите пометить свою позицию, если ваша функция не перемещает курсор? – ZyX

+0

Не знаю, действительно. Это просто плохая копия/вставка, основанная на некоторых указателях, которые я получил в #[email protected] Не совсем поняли, как получить что-то полезное из файлов справки. Я нахожусь на третий день с Вимом здесь;) – peterfarsinsen

ответ

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 

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

+0

Спасибо! Кажется, работает так, как хотелось бы. – peterfarsinsen

17

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

augroup CommandTExtension 
    autocmd! 
    autocmd FocusGained * CommandTFlush 
    autocmd BufWritePost * CommandTFlush 
augroup END 
+0

Это работает очень хорошо. Я просто застрял в моем .vimrc, и теперь CommandT работает так, как я ожидал. Благодарю. –

+0

Это замечательно, спасибо. – jpc

+0

Perfect - спасибо! – Skilldrick