![根据参数选择要运行的 vimenter 自动命令](https://linux22.com/image/1367072/%E6%A0%B9%E6%8D%AE%E5%8F%82%E6%95%B0%E9%80%89%E6%8B%A9%E8%A6%81%E8%BF%90%E8%A1%8C%E7%9A%84%20vimenter%20%E8%87%AA%E5%8A%A8%E5%91%BD%E4%BB%A4.png)
我正在尝试减少打开 VIM 时需要执行的操作数量。我想考虑以下三种情况:
1.打开指定目录的vim
vim .
对于这种情况,我想打开 NERDTree,其中包含以下内容~/.vimrc
:
autocmd vimenter * NERDTree
2. 在大屏幕上打开指定目录的 vim
vim . --large
在这里我想打开 NERDTree 并进行一些屏幕分割:
autocmd vimenter * NERDTree
autocmd vimenter * wincmd w
autocmd vimenter * wincmd v
autocmd vimenter * wincmd v
3. 使用特定文件名打开 vim
vim ~/vimrc
对于这种情况,我不想运行autocmd
上面提到的任何操作。
编辑-最终实施
感谢 FDinoff 的回答。
if argc() == 1 && arv(0) == '.' " `vim .` called
autocmd vimenter * NERDTree " Start up NERDTree
autocmd vimenter * wincmd w " Jump to split that file is open in
if !empty($L)
autocmd vimenter * wincmd v
autocmd vimenter * wincmd v
endif
endif
并使用L=t vim .
、vim .
或运行它vim specific_file
答案1
您可以使用argc()
和argv()
在 vimrc 中找到 vim 的参数并相应地设置自动命令。因此,对于第一个,你可以这样做,只在第一个参数为.
if argc() == 1 && argv(0) == '.'
autocmd vimenter * NERDTree
endif
对于大型显示器,我认为使用 shell 变量是正确的方法,因为 vim 认为--large
invim --large
是 vim 的参数,而不是脚本的参数。我不知道是否有办法解决这个问题。
您可以做类似的事情vim -- . --large
,但是 vim 会为一个文件打开一个缓冲区--large
,这可能不是您想要的。