NerdTree-ツリーでファイルを表示


101

NerdTreeディレクトリパネルに現在のファイルを表示するショートカットはありますか?

TextMate 'ドロワーのファイルを表示'のように-Ctrl + Command + R

回答:


186

in:h NERDTree:

:NERDTreeFind                                                  :NERDTreeFind
    Find the current file in the tree. If no tree exists for the current tab,
    or the file is not under the current root, then initialize a new tree where
    the root is the directory of the current file.

デフォルトでは何にもバインドされていないと思うので、自分でキーバインドを行う必要があります。

nmap ,n :NERDTreeFind<CR>

と一緒に私の.vimrcに表示されるものです

nmap ,m :NERDTreeToggle<CR>

キーマッピングは機能しますが、vim内でNERDTreeFindを呼び出す方法は?
アザタール

9
@toszter just:NERDTreeFind
Thomas

1
NERDTreeがそのタブ内で作成されるたびにこれを行うように設定する方法はありますか?
氏ミッケル

1
@MrA NERDTreeFindコマンドでのみNERDTreeを作成できます-それで十分ですか?
トーマス

21

これをチェックしてください、それは同期操作を自動化します、あなたがバッファを変更するときはいつでも、オタクはそれ自身を自動的にリフレッシュします(私はここに小さな変更を加えてコピーしました

" Check if NERDTree is open or active
function! IsNERDTreeOpen()        
  return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction

" Call NERDTreeFind iff NERDTree is active, current window contains a modifiable
" file, and we're not in vimdiff
function! SyncTree()
  if &modifiable && IsNERDTreeOpen() && strlen(expand('%')) > 0 && !&diff
    NERDTreeFind
    wincmd p
  endif
endfunction

" Highlight currently open buffer in NERDTree
autocmd BufEnter * call SyncTree()

ありがとう、ずっと探していました!:)
Gnagno 2017年

この構成はほとんどの場合にうまく機能しますが、coc.nvimを使用して参照機能に移動すると、すべてが台無しになりました。修正された問題のBufRead代わりにイベントを使用しBufEnterます。
Eddie Cooro

6

これはおそらく単なるコメントであるべきです。現在のバージョンでは、NerdTreeを切り替えてSyncTreeを使用すると、NERDTreeが2回呼び出されます。この変更はその問題を修正するようです:

" Check if NERDTree is open or active
function! IsNERDTreeOpen()
  return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction

" Call NERDTreeFind iff NERDTree is active, current window contains a modifiable
" file, and we're not in vimdiff
function! SyncTree()
  if &modifiable && IsNERDTreeOpen() && strlen(expand('%')) > 0 && !&diff
    NERDTreeFind
    wincmd p
  endif
endfunction

" Highlight currently open buffer in NERDTree
autocmd BufEnter * call SyncTree()

function! ToggleNerdTree()
  set eventignore=BufEnter
  NERDTreeToggle
  set eventignore=
endfunction
nmap <C-n> :call ToggleNerdTree()<CR>

0

Chen Rushanの投稿に沿って、autocmd BufEnter *を呼び出してSyncTree()を呼び出してもNERDTreeは閉じません。NERDTreeの切り替えを許可しながらNERDTreeで現在開いているバッファを強調表示する解決策(以下以外)が見つかりませんでした。

以下は、次のバッファマッピングにCtrl +]を使用しているときにNERDTreeを切り替えてファイルをハイライト表示できるようにするために一緒に削ったものです。

うまくいけば、他の人がこれを改善できます。

"Buffers
set hidden

function! IsNERDTreeOpen()        
  return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction

function! NextBuffer()
     bnext
  if IsNERDTreeOpen() 
       NERDTreeFind
       wincmd p
  endif
endfunction

nnoremap <c-]> <Esc>:call NextBuffer()<CR>

function! PrevBuffer()
     bprev
  if IsNERDTreeOpen() 
       NERDTreeFind
       wincmd p
  endif
endfunction

nnoremap <c-[> <Esc>:call PrevBuffer()<CR>

function! ToggleNT()
    NERDTreeToggle
endfunction

map <c-u> <Esc>:call ToggleNT()<cr>

0

Chen Rushanの回答+コメントは、ツリーがアクティブ化されている場合を除いて、完全にうまく機能しました。この設定により、ツリーを開いたときにツリー内の現在のファイルが表示されます。

" Check if NERDTree is open or active
function! IsNERDTreeOpen()
  return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction

function! CheckIfCurrentBufferIsFile()
  return strlen(expand('%')) > 0
endfunction

" Call NERDTreeFind iff NERDTree is active, current window contains a modifiable
" file, and we're not in vimdiff
function! SyncTree()
  if &modifiable && IsNERDTreeOpen() && CheckIfCurrentBufferIsFile() && !&diff
    NERDTreeFind
    wincmd p
  endif
endfunction

" Highlight currently open buffer in NERDTree
autocmd BufRead * call SyncTree()

function! ToggleTree()
  if CheckIfCurrentBufferIsFile()
    if IsNERDTreeOpen()
      NERDTreeClose
    else
      NERDTreeFind
    endif
  else
    NERDTree
  endif
endfunction

" open NERDTree with ctrl + n
nmap <C-n> :call ToggleTree()<CR>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.