CtrlP
和NERDTree
。当我使用CtrlP
搜索功能打开文件时,有时会在NERDTree窗口中打开文件(并且总是在NERD窗口处于活动状态的情况下)。如何阻止
CtrlP
在NERDTree中打开文件,并强迫它在主窗口中打开它们?我曾尝试过Vim中的CtrlP
文档,但找不到解决方法。这些都是
.vimrc
中与NERDTree和CtrlP相关的所有配置: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>
#1 楼
最终找到了一种无需一直关闭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。
#2 楼
我对此跳闸了太多次了:我通过重新映射
<c-p>
来关闭NERDTree(如果已打开)然后打开CtrlP来解决了这个问题。这在您的.vimrc中:let g:ctrlp_map = ''
nnoremap <c-p> :NERDTreeClose\|CtrlP<CR>
说明:
第一行使CtrlP不会覆盖您的自定义映射。
第二行关闭在打开CtrlP之前在NERDTree上运行。
#3 楼
通过@jonasl答案,您还可以执行以下操作:let g:ctrlp_cmd = ':NERDTreeClose\|CtrlP'
#4 楼
为了扩展@DJ Madeira的答案,我使此函数可重复使用,因为我还在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>
#5 楼
来自其他答案的功能对我不起作用,但是我发现一个简单的解决方案,如果您始终像我一样一直打开NERDTree,则该解决方案会起作用。没有使NERDTree失去焦点的命令,但是我们可以使其集中焦点,然后切换到上一个窗口以确保其没有焦点。请注意,如果没有打开,这将导致它打开。let g:ctrlp_map = ''
map <C-P> :NERDTreeFocus<CR>:wincmd w<CR>:CtrlP<CR>
评论
太好了,谢谢分享。您是否考虑过直接将其贡献给Ctrl-P?
– bobylito
17年7月30日在16:41