【问题标题】:In VIM how to make NERDTree open at startup nicely when giving args在 VIM 中,如何在提供参数时使 NERDTree 在启动时很好地打开
【发布时间】:2014-12-16 06:42:33
【问题描述】:

让我解释一下我的问题,我想做的是:

  1. 从不带参数的命令行调用gvim,希望NERDTree 在我的/home/user/Documents 文件夹中默认打开。

  2. 从命令行调用gvim . 想要打开NERDTree,并将目录设置为执行命令的实际目录。但我仍然想要左边的 NERDTree 和右边的空缓冲区(不是 NERDTree 是唯一的窗口,就像通常发生的那样)。

  3. 从命令行调用 gvim /some/path/to/folder 想要打开 NERDTree 并将目录设置为给定目录。但我仍然想要左边的 NERDTree 和右边的空缓冲区(不是 NERDTree 是唯一的窗口,就像通常发生的那样)。

  4. 使用参数调用gvim 时:

    • 如果是文件,不要只打开 NERDTree 文件。
    • 如果是目录 NERDTree 应该作为#3

#1我有:

function! StartUp()
    if 0 == argc()
        NERDTree ~/Documents
    endif
endfunction

autocmd VimEnter * call StartUp()
autocmd VimEnter * wincmd p

我想与#2#3 联系的是:

function! StartUp()
    if 0 == argc()
        NERDTree ~/Documents
    else
        if argv(0) == '.'
            NERDTree expand(getcwd())
        else
            NERDTree expand(argv(0))
        endif
    endif
endfunction

autocmd VimEnter * call StartUp()
autocmd VimEnter * wincmd p

但它不起作用,它给了我错误并且 vim 有时会冻结。我该怎么做才能达到预期的效果?

感谢您的帮助。

完整的解决方案

不完全像我预期的那样工作,但它非常非常接近。到目前为止,上帝。

function! StartUp()
    if 0 == argc()
        NERDTree ~/Documents
    else
        if argv(0) == '.'
            execute 'NERDTree' getcwd()
        else
            execute 'NERDTree' getcwd() . '/' . argv(0)
        endif
    endif
endfunction

autocmd VimEnter * call StartUp()
autocmd VimEnter * wincmd p

【问题讨论】:

    标签: vim args nerdtree


    【解决方案1】:

    我不能给你一个完整的解决方案,但这里有一个提示可以解决错误:

    :NERDTree 命令采用(可选)目录;这不能解决表达式。 Vim 的求值规则与大多数编程语言不同。您需要使用:execute 来评估变量(或表达式);否则,按字面意思理解;即 Vim 使用变量名本身作为参数。所以改变这个:

    NERDTree expand(getcwd())
    

    进入:

    execute 'NERDTree' getcwd()
    

    我也省略了expand(),因为getcwd() 已经返回了完整路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多