Vim的NerdTree插件

一個項目文件多起來時,左邊的文件樹菜單是必要的。

參考:經常使用文件樹快捷鍵
全部命令及推薦鍵盤映射:官方python

image

在vundle插件管理的方式,直接在~/.vimrc中的Plugin段落中加入`Plugin "scrooloose/nerdtree
"而後重啓Vim並輸入PluginInstall`,便可完成安裝git

而後輸入: NERDTreeToggle便可打開文件樹。固然,默認是關閉的,須要每次都輸入命令打開。
還能夠設置vim快捷鍵來映射,在vimrc中加入:github

map <F3> :NERDTreeMirror<CR>
map <F3> :NERDTreeToggle<CR>

切換工做臺和目錄

ctrl + w + h    光標 focus 左側樹形目錄
ctrl + w + l    光標 focus 右側文件顯示窗口
ctrl + w + w    光標自動在左右側窗口切換
ctrl + w + r    移動當前窗口的佈局位置

o       在已有窗口中打開文件、目錄或書籤,並跳到該窗口
go      在已有窗口 中打開文件、目錄或書籤,但不跳到該窗口
t       在新 Tab 中打開選中文件/書籤,並跳到新 Tab
T       在新 Tab 中打開選中文件/書籤,但不跳到新 Tab
i       split 一個新窗口打開選中文件,並跳到該窗口
gi      split 一個新窗口打開選中文件,但不跳到該窗口
s       vsplit 一個新窗口打開選中文件,並跳到該窗口
gs      vsplit 一個新 窗口打開選中文件,但不跳到該窗口
!       執行當前文件
O       遞歸打開選中 結點下的全部目錄
m    文件操做:複製、刪除、移動等

切換標籤頁

:tabnew [++opt選項] [+cmd] 文件      創建對指定文件新的tab
:tabc   關閉當前的 tab
:tabo   關閉全部其餘的 tab
:tabs   查看全部打開的 tab
:tabp   前一個 tab
:tabn   後一個 tab

標準模式下:
gT      前一個 tab
gt      後一個 tab

剛開始使用時候的小問題

目前問題是,不能保存全部打開文件的狀態。在同一個tab中打開另外一個文件時,以前文件的編輯歷史都會丟失,也就是無法u撤銷編輯。即便有相關的方法控制這些,只是做爲一個文件菜單來講,這也太麻煩了。
解決方案:
文件都在新tab打開,這樣就能夠保持各自狀態了。vim

經常使用鍵盤映射

image

NerdTree 在 .vimrc 中的經常使用配置

autocmd vimenter * NERDTree  "自動開啓Nerdtree
"let g:NERDTreeWinSize = 25 "設定 NERDTree 視窗大小
"開啓/關閉nerdtree快捷鍵
map <C-f> :NERDTreeToggle<CR>
"let NERDTreeShowBookmarks=1  " 開啓Nerdtree時自動顯示Bookmarks
"打開vim時若是沒有文件自動打開NERDTree
autocmd vimenter * if !argc()|NERDTree|endif
"當NERDTree爲剩下的惟一窗口時自動關閉
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
"設置樹的顯示圖標
let g:NERDTreeDirArrowExpandable = '▸'
let g:NERDTreeDirArrowCollapsible = '▾'
let NERDTreeIgnore = ['\.pyc$']  " 過濾全部.pyc文件不顯示
"let g:NERDTreeShowLineNumbers=1  " 是否顯示行號
let g:NERDTreeHidden=0     "不顯示隱藏文件
"Making it prettier
let NERDTreeMinimalUI = 1
let NERDTreeDirArrows = 1

Nerdtree隱藏某些指定文件

Vim常常產生swp緩存文件,還有一些python產生的pyc文件,Nerdtree顯示出來很很差看,最好屏蔽掉。
在vimrc中配置這幾句話能夠達到效果:windows

" 不顯示隱藏文件
let g:NERDTreeHidden=0
" 過濾: 全部指定文件和文件夾不顯示
let NERDTreeIgnore = ['\.pyc$', '\.swp', '\.swo', '\.vscode', '__pycache__']  

恢復顯示隱藏的文件的命令,在Nerdtree中按Ctrl-I,其中I是大寫。緩存

Nerdtree刷新

正常下Nerdtree是不會自動刷新的,文件刪除了,多了都不會自動顯示。
可是其實不用退出vim,
r就一會兒刷新了。app

NerdTree的美化

用多了Vim,就須要nerdtree樹形菜單,用多了菜單,就像把它美化。

通常最經常使用的美化Nerdtree插件就是vim-devicons,詳細配置方法在github官網有,主要以下:ide

  1. 安裝 Nerd Font字體,網址在此。安裝字體的方法每一個電腦系統不同。由於所有字體多到3G,因此最快到方法是到官網首頁點擊Download,下載Droid Sans Mono Nerd這個字體,8M左右,下載好了若是是Mac的話,就選擇壓縮包裏的Droid Sans Mono Nerd Font Complete.otf,雙擊安裝。
  2. 在Terminal.app或iTerm2的系統設置裏,設置字體爲Droid Sans Mono Nerd
  3. ~/.vimrc中插件管理處加入Plugin 'ryanoasis/vim-devicons',重啓vim而後:PluginInstall進行下載安裝。
  4. ~/.vimrc中配置默認編碼set encoding=utf8和默認字體set guifont=DroidSansMono_Nerd_Font:h11

完成。
而後就會變成這個樣子:佈局

image

進一步美化: vim-nerdtree-syntax-highlight插件

vim-nerdtree-syntax-highlight插件是配合上面vim-devicons插件加強的。直接在vimrc中Plugin 'tiagofumo/vim-nerdtree-syntax-highlight',重啓並:PluginInstall便可。效果以下:字體

image

注意:安裝完vim-devicons後,vim速度已經有些許延遲了,再安裝這個插件會感覺到更明顯的延遲。

最終配置

插件管理器處:

        "<NERDTREE>
            Plug 'scrooloose/nerdtree'          " File tree manager
            Plug 'jistr/vim-nerdtree-tabs'      " enhance nerdtree's tabs
            Plug 'ryanoasis/vim-devicons'       " add beautiful icons besides files
            Plug 'Xuyuanp/nerdtree-git-plugin'  " display git status within Nerdtree
            Plug 'tiagofumo/vim-nerdtree-syntax-highlight' " enhance devicons

配置:

" <Nerdtree>-------------------{
    ">> Basic settings
        let g:NERDTreeChDirMode = 2  "Change current folder as root
        autocmd BufEnter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) |cd %:p:h |endif

    ">> UI settings
        let NERDTreeQuitOnOpen=1   " Close NERDtree when files was opened
        let NERDTreeMinimalUI=1    " Start NERDTree in minimal UI mode (No help lines)
        let NERDTreeDirArrows=1    " Display arrows instead of ascii art in NERDTree
        let NERDTreeChDirMode=2    " Change current working directory based on root directory in NERDTree
        let g:NERDTreeHidden=1     " Don't show hidden files
        let NERDTreeWinSize=30     " Initial NERDTree width
        let NERDTreeAutoDeleteBuffer = 1  " Auto delete buffer deleted with NerdTree
        "let NERDTreeShowBookmarks=0   " Show NERDTree bookmarks
        let NERDTreeIgnore = ['\.pyc$', '\.swp', '\.swo', '__pycache__']   " Hide temp files in NERDTree
        "let g:NERDTreeShowLineNumbers=1  " Show Line Number
    " Open Nerdtree when there's no file opened
        "autocmd vimenter * if !argc()|NERDTree|endif
    " Or, auto-open Nerdtree
        "autocmd vimenter * NERDTree
    " Close NERDTree when there's no other windows
        autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
    " Customize icons on Nerdtree
        let g:NERDTreeDirArrowExpandable = '▸'
        let g:NERDTreeDirArrowCollapsible = '▾'

    ">> NERDTREE-GIT
        " Special characters
    let g:NERDTreeIndicatorMapCustom = { 
        \ "Modified"  : "✹",
        \ "Staged"    : "✚",
        \ "Untracked" : "✭",
        \ "Renamed"   : "➜",
        \ "Unmerged"  : "═",
        \ "Deleted"   : "✖",
        \ "Dirty"     : "✗",
        \ "Clean"     : "✔︎",
        \ 'Ignored'   : '☒',
        \ "Unknown"   : "?"
    \ }

    ">> NERDTree-Tabs
        "let g:nerdtree_tabs_open_on_console_startup=1 "Auto-open Nerdtree-tabs on VIM enter
    ">> Nerdtree-devicons
        "set guifont=DroidSansMono_Nerd_Font:h11
    ">> Nerdtree-syntax-highlighting
        "let g:NERDTreeDisableFileExtensionHighlight = 1
        "let g:NERDTreeDisableExactMatchHighlight = 1
        "let g:NERDTreeDisablePatternMatchHighlight = 1
        "let g:NERDTreeFileExtensionHighlightFullName = 1
        "let g:NERDTreeExactMatchHighlightFullName = 1
        "let g:NERDTreePatternMatchHighlightFullName = 1
        "let g:NERDTreeHighlightFolders = 1 " enables folder icon highlighting using exact match
        "let g:NERDTreeHighlightFoldersFullName = 1 " highlights the folder name
        "let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error
" }
相關文章
相關標籤/搜索