From 1b14b96085d235fda580dd8eec5bb9bceb57fe91 Mon Sep 17 00:00:00 2001 From: Yuan Chiu Date: Sat, 26 Apr 2025 08:16:12 +0800 Subject: [PATCH] =?UTF-8?q?feat=20.vimrc:=20=E5=A2=9E=E5=8A=A0=E5=88=A4?= =?UTF-8?q?=E5=AE=9A=E7=95=B6=E5=89=8D=E8=A6=96=E7=AA=97=E5=A4=A7=E5=B0=8F?= =?UTF-8?q?=E4=BE=86=E6=B1=BA=E5=AE=9A=E8=A6=81=E4=B8=8D=E8=A6=81=E8=87=AA?= =?UTF-8?q?=E5=8B=95=E9=96=8B=E5=95=9Fnerdtree?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dot_vimrc | 60 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/dot_vimrc b/dot_vimrc index 8b849eb..78cb01e 100644 --- a/dot_vimrc +++ b/dot_vimrc @@ -204,39 +204,45 @@ let g:airline#extensions#tabline#enabled = 1 nnoremap :NERDTreeToggle nmap :NERDTreeToggle +function! s:MaybeStartNERDTree() + if winheight(0) > 20 && winwidth(0) > 140 + " 啟動時自動開啟 NERDTree,且只在沒有指定檔案時開啟 + autocmd VimEnter * NERDTree | wincmd p + "autocmd StdinReadPre * let s:std_in=1 + autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif -" 啟動時自動開啟 NERDTree,且只在沒有指定檔案時開啟 -autocmd VimEnter * NERDTree | wincmd p -"autocmd StdinReadPre * let s:std_in=1 -autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif + " 如果關掉最後一個 buffer,並且只剩下 NERDTree,則關閉 Vim + autocmd BufEnter * if winnr('$') == 1 && getbufvar('%', '&filetype') == 'nerdtree' | quit | endif + let NERDTreeShowHidden=1 + "let g:nerdtree_tabs_open_on_console_startup=1 + let NERDTreeQuitOnOpen=0 -" 如果關掉最後一個 buffer,並且只剩下 NERDTree,則關閉 Vim -autocmd BufEnter * if winnr('$') == 1 && getbufvar('%', '&filetype') == 'nerdtree' | quit | endif -let NERDTreeShowHidden=1 -"let g:nerdtree_tabs_open_on_console_startup=1 -let NERDTreeQuitOnOpen=0 + "" 沒有文件開啟的時候關閉nerdtree + autocmd QuitPre * if empty(&bt) | lclose | endif -"" 沒有文件開啟的時候關閉nerdtree -autocmd QuitPre * if empty(&bt) | lclose | endif + "" Start NERDTree + "autocmd VimEnter * NERDTree + "" Go to previous (last accessed) window. + "autocmd VimEnter * wincmd p -"" Start NERDTree -"autocmd VimEnter * NERDTree -"" Go to previous (last accessed) window. -"autocmd VimEnter * wincmd p + "autocmd StdinReadPre * let s:std_in=1 + "autocmd VimEnter * NERDTree | if argc() > 0 || exists("s:std_in") | wincmd p | endif + "autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif -"autocmd StdinReadPre * let s:std_in=1 -"autocmd VimEnter * NERDTree | if argc() > 0 || exists("s:std_in") | wincmd p | endif -"autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif + " Start NERDTree and put the cursor back in the other window. + autocmd VimEnter * NERDTree | wincmd p -" Start NERDTree and put the cursor back in the other window. -autocmd VimEnter * NERDTree | wincmd p + " Exit Vim if NERDTree is the only window remaining in the only tab. + autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif -" Exit Vim if NERDTree is the only window remaining in the only tab. -autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif + " If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree. + autocmd BufEnter * if winnr() == winnr('h') && bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 | + \ let buf=bufnr() | buffer# | execute "normal! \w" | execute 'buffer'.buf | endif -" If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree. -autocmd BufEnter * if winnr() == winnr('h') && bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 | - \ let buf=bufnr() | buffer# | execute "normal! \w" | execute 'buffer'.buf | endif + " Mirror the NERDTree before showing it. This makes it the same on all tabs. + nnoremap :NERDTreeMirror:NERDTreeFocus + endif +endfunction -" Mirror the NERDTree before showing it. This makes it the same on all tabs. -nnoremap :NERDTreeMirror:NERDTreeFocus +" 自動執行 +autocmd VimEnter * call s:MaybeStartNERDTree()