每当新文件撰写时,我都试图使VIM运行命令“ commandtflush”。对于不使用命令-T插件的人,“命令tflush”命令用于重建当前目录中的文件索引。

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

我已经尝试过自己编写一个函数,但是要么不会发射或发射得太早(在编写文件之前,要点是将文件添加到索引中):

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

我怀疑可以通过在bufwritepre中设置一些布尔值var(iSthefilenew)来解决它,然后如果刚刚创建了文件,则可以在bufwritepost中执行commandTflush命令,但我无法弄清楚该语法。另一个解决方案可能是从BufWritePre回调中设置/解开BufWritePost回调,如果可能的话...

有人可以在这里帮我吗? )

有帮助吗?

解决方案

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

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

其他提示

这是我的解决方案。每当写文件时,每当VIM的窗口获得焦点时,它都会触发命令tflush。当您在VIM之外创建文件时,这很有用 - 例如,通过在版本控制系统中的分支之间切换。重新输入VIM后,新文件将立即在Commandt中找到。

augroup CommandTExtension
  autocmd!
  autocmd FocusGained * CommandTFlush
  autocmd BufWritePost * CommandTFlush
augroup END
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top