【问题标题】:Execute command when buffer is in directory in vim当缓冲区在vim目录中时执行命令
【发布时间】:2019-10-30 00:40:00
【问题描述】:

我正在寻找一种在缓冲区指向目录时执行命令(:term) 的方法(比如打开指向目录的 vim 时会打开 NERDTree) 当缓冲区为空时/开始屏幕

【问题讨论】:

    标签: vim macvim


    【解决方案1】:

    像 NERDTree 这样的插件使用所谓的 暂存缓冲区 来显示它们的“UI”。对于语法高亮,大多数还设置了自定义的、特定于插件的 filetype。所以你可以挂钩:help FileType事件::autocmd FileType nerdtree ...

    直接打开终端对我不起作用;因为插件在其暂存缓冲区设置中被中断,并且不希望终端干扰。这里至少需要返回原始暂存缓冲区的附加命令。 (但像:echomsg 这样不起眼的东西会照原样工作。)或者你只是通过feedkeys() 延迟开放:

    :autocmd FileType nerdtree call feedkeys(":terminal\<CR>")
    

    一种更通用的方法(不仅适用于 NERDTree)可以连接到 BufWinEnter 并检查 &amp;buftype == 'nofile' 是否(这是暂存缓冲区的典型属性)。

    要检查 Vim 是否以“开始屏幕”启动,请使用 VimEnter 并检查 empty(bufname(''))

    :autocmd VimEnter * if empty(bufname('')) | exe "terminal" | endif
    

    【讨论】:

    • 在运行 :autocmd FileType nerdtree call feedkeys(":terminal\&lt;CR&gt;") 时,我打开了终端,但我也在终端中获得了 :terminal 命令
    • 你能举一个 BufWinEnter 和 VimEnter 的例子吗?
    • 好的,如果在启动时没有文件传递给 Vim,我放一个打开终端的。它应该已经很简单了。如果您不完全理解这一点,我建议您不要盲目地将这些复制到您的.vimrc。随着这些自定义设置的积累,可能会出现副作用,并且会导致您很难解决此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多