写入新文件时运行CommandTFlush命令

pet*_*sen 6 vim function autocmd

我试图让Vim在新文件写入时运行命令'CommandTFlush'.对于那些不使用Command-T插件的用户,'CommandTFlush'命令用于重建当前目录中的文件索引.

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

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

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

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

有人可以帮帮我吗?;)

Kri*_*amp 17

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

augroup CommandTExtension
  autocmd!
  autocmd FocusGained * CommandTFlush
  autocmd BufWritePost * CommandTFlush
augroup END
Run Code Online (Sandbox Code Playgroud)


ZyX*_*ZyX 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
Run Code Online (Sandbox Code Playgroud)

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