在文件夹直接启动vim后NERDTree按t开新标签页总出现[No Name]如何解决
问题原因
你配置里的两条自动命令逻辑冲突导致了空白文件生成:
- 启动vim时如果未指定文件,vim会默认创建一个匿名空白缓冲区,你的
autocmd VimEnter * NERDTree直接唤起NERDTree后,这个匿名缓冲区没有被销毁,一直残留。 autocmd BufWinEnter * silent NERDTreeMirror的触发时机不对,每次窗口切换都会触发NERDTree镜像,新标签页创建时会先保留默认的匿名缓冲区,再加载NERDTree和你选中的文件,就出现了多余的[No Name]文件。
修复步骤
替换你配置中对应的NERDTree自动命令部分即可:
- 先找到原配置里的这一段:
" open NERDTree automatically autocmd StdinReadPre * let s:std_in=1 autocmd VimEnter * NERDTree " Open the existing NERDTree on each new tab. autocmd BufWinEnter * silent NERDTreeMirror " Exit Vim if NERDTree is the only window left. autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | \ quit | endif autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") \ && b:NERDTree.isTabTree()) | q | endif
- 替换为以下内容:
" open NERDTree automatically autocmd StdinReadPre * let s:std_in=1 " 仅未指定启动文件时打开NERDTree,同时销毁默认匿名缓冲区 autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | wincmd p | bd! | endif " 仅在新标签页加载时镜像NERDTree,避免多余触发 autocmd TabNewEntered * silent NERDTreeMirror " Exit Vim if NERDTree is the only window left. autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | \ quit | endif
注:原来的两条关闭逻辑重复,删除冗余的一条即可,不影响功能。
修改完成后保存init.vim重启vim即可生效,此时直接启动vim再用t快捷键在新标签页打开文件不会再生成[No Name]空白文件。
内容的提问来源于stack exchange,提问作者Coinc
相关产品推荐
相关产品推荐

