Ich verwende die folgende Zuordnung, um den aktuellen Puffer in NERDTree anzuzeigen:
map <leader>r :NERDTreeFind<cr>
Wenn ich eine neue Registerkarte mit einem anderen Pfad als der vorherigen Datei in VIM öffne, bleibt NERDTree immer noch dieselbe Verzeichnishierarchie der vorherigen Datei.
Gibt es eine Sync-Verknüpfung, um das aktuelle Stammverzeichnis in das Verzeichnis der neuen geöffneten Datei zu ändern?
Ich verwende die folgende Zuordnung, um den aktuellen Puffer in NERDTree anzuzeigen:
map <leader>r :NERDTreeFind<cr>
Ich fand sowohl die vorhandenen Antworten als lehrreich und kombinierte erfolgreich die beiden, so dass das Verhalten eher so ist, wie viele Leute es von einer IDE erwarten würden: Klicken Sie auf ein geöffnetes Fenster / Puffer und lassen Sie diese Datei im NERDTree hervorheben. Ich stelle das in mein ~ / .vimrc:
autocmd BufEnter * if &modifiable | NERDTreeFind | wincmd p | endif
Was macht das?
autocmd BufEnter
- wird jedes Mal ausgeführt, wenn Sie sich auf einen Puffer konzentrieren (einschließlich des NERDTree-Fensters)if &modifiable
- Wenn Sie auf das NERDTree-Fenster klicken, tun Sie nichts weiter (das NERDTree-Fenster kann nicht geändert werden)wincmd p
- NERDTreeFind verlässt den Cursor auf den NERDTree; Dadurch wird wieder das Fenster angezeigt, auf das Sie sich ursprünglich konzentriert hattenBeachten Sie, dass dies nicht auf funktioniert jeden anderen Puffer, die nicht veränderbar ist - aber das ist im Allgemeinen eine gute Sache; ansonsten (zum Beispiel) jedes Mal :help
, wenn Sie in vim sind, sucht NERDTree das Verzeichnis, in dem die Hilfedateien gespeichert sind, und fokussiert es - wahrscheinlich nicht etwas, das Sie tun möchten.
Diese einzeilige Lösung funktionierte zunächst sehr gut für mich, aber ich stellte bald fest, dass NERDTree jedes Mal aktiviert wird, wenn ich eine Datei öffne. Dadurch wird verhindert, dass NERDTree jemals geschlossen wird! Wenn Sie NERDTree nicht in Vollzeit nutzen möchten, geben Sie dies stattdessen in Ihre .vimrc ein:
" returns true iff is NERDTree open/active function! rc:isNTOpen() return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1) endfunction " calls NERDTreeFind iff NERDTree is active, current window contains a modifiable file, and we're not in vimdiff function! rc:syncTree() if &modifiable && rc:isNTOpen() && strlen(expand('%')) > 0 && !&diff NERDTreeFind wincmd p endif endfunction autocmd BufEnter * call rc:syncTree()
wirf am Ende ein% -Zeichen wie ein Boss
:NERDTree %
Ich habe dies in meiner .vimrc, es Maps Ctrl+ oNerdtree im Verzeichnis des aktuellen Puffers umschalten:
map <C-o> :NERDTreeToggle %<CR>
Ich bin nicht sicher, ob es eine NERDTree-spezifische Methode gibt, aber Sie können Vim immer so konfigurieren, dass das Arbeitsverzeichnis auf das aktuelle Verzeichnis der Datei gesetzt wird :
autocmd BufEnter * lcd %:p:h
Alles, was Sie nach dem Öffnen einer Datei in einer neuen Registerkarte tun müssen, befindet sich jetzt :NERDTreeToggle
in der neuen Registerkarte.
Ich kam in dieser Frage gestern, nach ein paar Stunden zu graben, ich submited eine Pull - Request an den nerdtree Repo scrooloose eine Einführung NERDTreeCWD
Befehl, die aktuelle Arbeitsverzeichnis (Update auf 2012.11.12 NERD Baumwurzel zu ändern: Die PR verschmolzen wurde in sollte der Upstream-Master auf einer aktualisierten Version verwendet werden können). Mit dieser Änderung kann diese Frage einfach durch den folgenden Code gelöst werden.
autocmd BufEnter * silent! if bufname('%') !~# 'NERD_tree_' | cd %:p:h | NERDTreeCWD | wincmd p | endif
Vergleichen Sie den NERDTreeFind
Ansatz von @ shinzui und @ Lambart . Dies ist genau das, was die Frage stellt. Mit NERDTreeFind
ändert sich die Bildlaufposition des Nerd-Baums und das Ergebnis ist nicht immer gleich (Wenn sich CWD im NERD-Baumstamm befindet, wird der Knoten einfach erweitert, anstatt in ihn zu wechseln).
Vergleichen Sie die Antwort von @Yaser Sulaiman. Diese Lösung hat immer ein NERD-Baumfenster geöffnet und kann leicht codiert werden. Wenn bereits ein NERD-Baumfenster geöffnet wurde, muss die Anwendung NERDTreeToggle
zweimal ausgelöst werden (zuerst das vorhandene schließen und dann erneut öffnen). Bei der zweiten Öffnung wird jedoch die gesamte cwd-Verarbeitung übersprungen.
Dies verhält sich wie :NERDTreeToggle
die aktuelle geöffnete Datei in NERDTree. Wenn Sie noch keine Datei geöffnet haben (dh Sie haben gerade vim
Ihre Befehlszeile eingegeben ), zeigt NERDTree an /home
.
Fügen Sie dies in Ihre .vimrc ein:
" Open NERDTree in the directory of the current file (or /home if no file is open) nmap <silent> <C-i> :call NERDTreeToggleInCurDir()<cr> function! NERDTreeToggleInCurDir() " If NERDTree is open in the current buffer if (exists("t:NERDTreeBufName") && bufwinnr(t:NERDTreeBufName) != -1) exe ":NERDTreeClose" else exe ":NERDTreeFind" endif endfunction
Ich wende beide Lösungen von Aktuelles Verzeichnis mit NERDTree ändern an : Verwenden Sie cd
, um das NERDTree-Arbeitsverzeichnis auf das aktuelle Verzeichnis und C
den NERDTree-Stammknoten auf das aktuelle Verzeichnis festzulegen
Ich denke, dieses Plugin ist das, was du willst https://github.com/jistr/vim-nerdtree-tabs