Ferma l'apertura di CtrlP in NERDTree


9

Uso entrambi CtrlPe NERDTreenel mio Vim. Quando apro un file usando la CtrlPfunzione di ricerca, a volte si apre nella finestra NERDTree (e sempre se la finestra NERD è quella attiva).

Come posso interrompere l' CtrlPapertura dei file in NERDTree e forzarlo ad aprirli nella finestra principale? Ho provato a CtrlPleggere i documenti in Vim, ma non sono riuscito a trovare un modo.

Queste sono tutte le configurazioni correlate a NERDTree e CtrlP nel mio .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>

Risposte:


6

Finalmente ho trovato un modo per farlo che non comporta la chiusura di NERDTree in ogni momento.

Ho creato una funzione che scorre tra le finestre aperte fino a quando non trova un buffer scrivibile, quindi esegue ctrl-p lì:

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()'

Dovrebbe funzionare per qualsiasi pannello, ad esempio MiniBufferExplorer.


Eccellente, grazie per averlo condiviso. Hai forse considerato di contribuire direttamente a Ctrl-P?
bobylito,

3

Ho inciampato su questo anche troppe volte:

L'ho risolto rimappando <c-p>alla chiusura di NERDTree (se aperto) e quindi aprendo CtrlP.

Metti questo nel tuo .vimrc:

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

Spiegazione: La prima riga impedisce a CtrlP di sovrascrivere il mapping personalizzato. E il secondo viene eseguito vicino su NERDTree prima di aprire CtrlP.


3

Dalla risposta di @jonasl, puoi anche fare:

let g:ctrlp_cmd = ':NERDTreeClose\|CtrlP'

2

Per espandere la risposta di @DJ Madeira, ho reso questa funzione riutilizzabile, poiché sto anche usando ctrl + l per l'elenco MRU

" 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>

1

Le funzioni di altre risposte non hanno funzionato per me, ma ho trovato una soluzione semplice che funziona se mantieni sempre NERDTree aperto come me. Non c'è alcun comando per sbloccare NERDTree, ma possiamo focalizzarlo e quindi passare alla finestra precedente per assicurarci che sia sfocato. Nota che questo lo farà aprire se non lo fosse.

let g:ctrlp_map = ''
map <C-P> :NERDTreeFocus<CR>:wincmd w<CR>:CtrlP<CR>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.