6

每当写入新文件时,我都试图让 Vim 运行命令“CommandTflush”。对于那些不使用 Command-T 插件的人,“CommandTflush”命令用于重建当前目录中的文件索引。

我想要做的是在文件写入磁盘后运行命令,以便 CommandTFlush 找到该文件并将其添加到它的索引中。

我自己尝试过编写一个函数,但是它要么不触发,要么触发得太快(在写入文件之前,重点是将文件添加到索引中):

au! BufWritePre * ks| call NewFilesUpdatesCommandT()
function! NewFilesUpdatesCommandT()
    let filename=@%
    if !filereadable(filename)
        CommandTFlush
    endif
endfunction

我怀疑它可以通过在 BufWritePre 中设置一些布尔变量 (isTheFileNew) 来解决,然后如果文件刚刚创建,则在 BufWritePost 中执行 CommandTflush 命令,但我无法弄清楚语法。如果可能的话,另一个解决方案可能是从 BufWritePre 回调中设置/取消设置 BufWritePost 回调......

有人可以帮我吗?;)

4

2 回答 2

17

这是我的解决方案。每当写入文件以及 Vim 的窗口获得焦点时,它都会触发 CommandTflush。当您在 vim 之外创建文件时,这很有用 - 例如通过在版本控制系统中的分支之间切换。重新进入 Vim 后,新文件将立即在 CommandT 中可用。

augroup CommandTExtension
  autocmd!
  autocmd FocusGained * CommandTFlush
  autocmd BufWritePost * CommandTFlush
augroup END
于 2011-04-26T14:19:26.063 回答
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

这是您的第二个建议的实现。

于 2010-08-15T09:59:14.780 回答