让vim的NerdTree插件配合CtrlP插件进行路径跳转

1 辙道辕门 发表于 2014-09-05 16:16:12 +0800 阅览(150) 评论(0)

最近比较眼馋sublime里ctrl+p组合按键快速查找文件的功能。vim里虽然有nerdtree插件能够看到树形目录结构,但是定位文件还是比较难的,经常需要去树上一个个点鼠标或是键盘。所以发现了这个插件:

CtrlP

看名字大概就知道是模仿sublime的啦。简单地尝试了一下,功能还挺强大的,基本上按照github页面里的设置也就可以用起来了。看样子还有很多其他功能,不过我目前只用得到ctrl+p。这里就有一个问题了:当我按ctrl+p,搜索并打开自己想要的文件后,点击回车后,由于nerdtree插件和ctrlp插件是两个独立的插件,因此nerdtree的目录树并没有变化。

我想如果能在搜索并打开想要的文件后,nerdtree也能跟着展开这个文件的路径就完美了。看了看文档,似乎ctrl+p插件本身没有这个功能。幸运的是,在nerdtree的文档中,找到了一个命令:NERDTreeFind,可以将文件树展开到当前文件的位置,而正巧ctrlp插件又可以修改打开文件的函数。

闲话休叙,只贴代码。

function! MyOpenFile(action, line)
 call call('ctrlp#acceptfile', [a:action, a:line])
 NERDTreeFind
 call feedkeys("\<C-w>p")
endfunction

let g:ctrlp_open_func = {
  \  'files' : 'MyOpenFile'
  \ }

 上面function!定义了一个名叫MyOpenFile的函数,!的作用是让这个函数能够被安全地重载,不加也无所谓。

这个函数首先调用ctrlp自身的打开文件命令,并将两个参数原样传递过去;

而后执行了了NERDTreeFind命令(效果和在vim的n模式下敲入冒号,敲入NERDTreeFind并回车是一样的);

由于NERDTreeFind命令执行后,当前窗口会变成nerd的窗口而不是文件窗口,这样对编辑文件来说显得有些麻烦,因此我们还有必要将当前窗口切换回文件窗口。所以我们调用了feedkeys模拟按键输入。注意要写成"\<C-w>p",引号引起一个字符串,左尖括号左边要加斜杠转义,而右尖括号是不需要的!它模拟了这样一个按键行为:先按下ctrl+w,再按p。它的效果是切换到前一个标签页。这样,nerdtree展开当前文件树以后,就会切回文件窗口,就可以继续编辑了。

虽然两个插件自身都不具备这个功能,不过由于它们各自设计了扩展性,所以稍加改动就可以协同工作了。可喜可和可喜可贺。

|

评论列表

还没有人评论。
返回