CtrlPがNERDTreeで開かないようにする


8

私は両方CtrlPNERDTreeVimで使用します。CtrlP検索機能を使用してファイルを開くと、そのファイルがNERDTreeウィンドウで開かれることがあります(また、NERDウィンドウがアクティブな場合は常に開かれます)。

CtrlPNERDTreeでファイルを開かないようにして、メインウィンドウでファイルを開くようにするにはどうすればよいですか?CtrlPVimでドキュメントを調べてみましたが、方法がわかりませんでした。

これらは、私のすべてのNERDTreeおよびCtrlP関連の構成です.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>

回答:


6

最後に、常にNERDTreeを閉じる必要のない方法を見つけました。

書き込み可能なバッファーが見つかるまで開いているウィンドウを循環し、そこでctrl-pを実行する関数を作成しました。

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

MiniBufferExplorerなどの任意のパネルで機能するはずです。


共有していただきありがとうございます。あなたはおそらくそれを直接Ctrl-Pに貢献することを考えましたか?
bobylito 2017

3

私もこれを何度もトリップしました。

<c-p>NERDTree(開いている場合)を閉じてからCtrlPを開くように再マップすることで解決しました。

これを.vimrcに入れてください:

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

説明:1行目は、CtrlPがカスタムマッピングを上書きしないようにします。そして2つ目は、CtrlPを開く前にNERDTreeで終了します。


3

@jonaslの回答から、あなたも行うことができます:

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

2

@DJマデイラの答えを拡張するために、MRUリストにctrl + lも使用しているので、この関数を再利用可能にしました

" 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

他の回答の関数は機能しませんでしたが、私と同じようにNERDTreeを常に開いたままにしておくと機能する簡単な解決策を見つけました。NERDTreeのフォーカスを外すコマンドはありませんが、フォーカスを合わせてから前のウィンドウに切り替えて、フォーカスが外れていることを確認できます。開かなかった場合、これが開くことに注意してください。

let g:ctrlp_map = ''
map <C-P> :NERDTreeFocus<CR>:wincmd w<CR>:CtrlP<CR>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.