Stoppen Sie das Öffnen von CtrlP in NERDTree

8

Ich benutze beide CtrlPund NERDTreein meinem Vim. Wenn ich eine Datei mit der CtrlPSuchfunktion öffne, wird sie manchmal im NERDTree-Fenster geöffnet (und immer dann, wenn das NERD-Fenster aktiv ist).

Wie kann ich verhindern, CtrlPdass Dateien in NERDTree geöffnet werden, und sie zwingen, sie im Hauptfenster zu öffnen? Ich habe versucht, die CtrlPDokumente in Vim durchzugehen, konnte aber keinen Weg finden.

Dies sind alle NERDTree- und CtrlP-bezogenen Konfigurationen in meinem .vimrc:

let g:netrw_liststyle    = 3
let NERDTreeShowHidden   = 1
let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files -co --exclude-standard']

command E Ex

map <C-t> :NERDTreeTabsToggle<CR>
nmap <Leader>r :NERDTreeFocus<cr>R<c-w><c-p>:CtrlPClearCache<cr>
Sheharyar
quelle

Antworten:

6

Endlich einen Weg gefunden, dies zu tun, bei dem NERDTree nicht ständig geschlossen wird.

Ich habe eine Funktion erstellt, die durch die geöffneten Fenster läuft, bis ein beschreibbarer Puffer gefunden wird, und dann dort Strg-P ​​ausführt:

function! CtrlPCommand()
    let c = 0
    let wincount = winnr('$')
    " Don't open it here if current buffer is not writable (e.g. NERDTree)
    while !empty(getbufvar(+expand("<abuf>"), "&buftype")) && c < wincount
        exec 'wincmd w'
        let c = c + 1
    endwhile
    exec 'CtrlP'
endfunction

let g:ctrlp_cmd = 'call CtrlPCommand()'

Sollte für jedes Panel funktionieren, zum Beispiel MiniBufferExplorer.

DJ Madeira
quelle
Ausgezeichnet, danke fürs Teilen. Haben Sie darüber nachgedacht, dies möglicherweise direkt zu Strg-P ​​beizutragen?
Bobylito
3

Ich bin auch zu oft darauf gestolpert:

Ich habe es gelöst, indem ich das <c-p>zum Schließen von NERDTree (falls geöffnet) neu zugeordnet und dann CtrlP geöffnet habe.

Fügen Sie dies in Ihre .vimrc ein:

let g:ctrlp_map = ''                      
nnoremap <c-p> :NERDTreeClose\|CtrlP<CR>  

Erläuterung: In der ersten Zeile überschreibt CtrlP Ihre benutzerdefinierte Zuordnung nicht. Und der zweite läuft knapp auf NERDTree, bevor CtrlP geöffnet wird.

Jonasl
quelle
3

Von @jonasl Antwort könnten Sie auch tun:

let g:ctrlp_cmd = ':NERDTreeClose\|CtrlP'
cmcginty
quelle
2

Um die Antwort von @DJ Madeira zu erweitern, habe ich diese Funktion wiederverwendbar gemacht, da ich auch Strg + 1 für die MRU-Liste verwende

" CtrlP
" Use this function to prevent CtrlP opening files inside non-writeable 
buffers, e.g. NERDTree
function! SwitchToWriteableBufferAndExec(command)
    let c = 0
    let wincount = winnr('$')
    " Don't open it here if current buffer is not writable (e.g. NERDTree)
    while !empty(getbufvar(+expand("<abuf>"), "&buftype")) && c < wincount
        exec 'wincmd w'
        let c = c + 1
    endwhile
    exec a:command
endfunction

" Disable default mapping since we are overriding it with our command
let g:ctrlp_map = ''
nnoremap <C-p> :call SwitchToWriteableBufferAndExec('CtrlP')<CR>
nnoremap <C-l> :call SwitchToWriteableBufferAndExec('CtrlPMRUFiles')<CR>
Paweł Duda
quelle
1

Funktionen aus anderen Antworten haben bei mir nicht funktioniert, aber ich habe eine einfache Lösung gefunden, die funktioniert, wenn Sie NERDTree immer so offen halten wie ich. Es gibt keinen Befehl zum Aufheben der Fokussierung von NERDTree, aber wir können es fokussieren und dann zum vorherigen Fenster wechseln, um sicherzustellen, dass es nicht fokussiert ist. Beachten Sie, dass dies dazu führt, dass es geöffnet wird, wenn dies nicht der Fall ist.

let g:ctrlp_map = ''
map <C-P> :NERDTreeFocus<CR>:wincmd w<CR>:CtrlP<CR>
Michael Grischenko
quelle