13

<< 返回vim使用进阶: 目录

本节所用命令的帮助入口:

:help netrw-browse
:help bufexplorer
:help winmanager 

[文件浏览]

在开发过程中,经常需要查找某个文件。我们前面在介绍path选项时,介绍过使用find命令查找文件的方法。本节介绍vim的文件浏览插件。

在vim 7.0以前,文件浏览功能由explorer.vim插件提供,在vim 7.0中,这个插件被netrw.vim插件所代替。本文以vim 7.0为例,主要介绍netrw.vim插件。

netrw.vim是vim的标准插件,它已经伴随vim而发行,不需要安装。

我们现在试一下vim文件功能,当你使用vim尝试打开目录时,vim会自动调用netrw.vim插件打开该目录(从操作系统的视角来看,目录其实是一种特殊的文件)。例如,我们在vim中执行命令”:e ~/src/vim70/src/“,会显示下面的窗口:

这个窗口类似于文件管理器,你可以创建、删除、改名文件或目录;在目录上按回车时,会进入该目录;在文件上按回车时,会使用vim打开该文件;可以更改排序方式、排序风格;隐藏目录或文件(使之不在上述窗口中显示)等等。

Netrw插件中常用键绑定有:

<F1>        显示帮助
<cr>        如果光标下为目录,则进入该目录;如果光标下是文件,则用vim打开该文件
-           返回上级目录
c           切换vim的当前工作目录为正在浏览的目录
d           创建目录
D           删除文件或目录
i           切换显示方式
R           改名文件或目录
s           选择排序方式
x           定制浏览方式,使用你指定的程序打开该文件 

其它常用键,诸如使用书签、隐藏符合条件的文件等,请参阅netrw帮助页。

上面我们用”:e ~/src/vim70/src/“的方式打开netrw,我们还可以使用”:Explore“等Ex命令来打开文件浏览器。我的vimrc中这样配置:

""""""""""""""""""""""""""""""
" netrw setting
""""""""""""""""""""""""""""""
let g:netrw_winsize = 30
nmap <silent> <leader>fe :Sexplore!<cr> 

这样,在我输入”,fe“时,就会打开一个垂直分隔的窗口浏览当前文件所在的目录,窗口的宽度为30。

浏览本地文件只是netrw插件的一项小功能,netrw插件最主要的功能是支持远程文件读写。利用该插件,你可以通过ftp,ssh,http等多种协议来编辑远程文件,也可以浏览远程机器的目录。

在软件开发过程中不常使用此功能,本文中不再介绍。参阅netrw手册页获取更多信息。

[缓冲区浏览]

在开发过程中,经常会打开很多缓冲区,尤其是使用tag文件在不同函数间跳转时,会不知不觉打开很多文件。要知道自己当前打开了哪些缓冲区,可以使用vim的”:ls“Ex命令查看。

开发过程中,又经常需要在不同文件间跳转。我习惯于使用”CTRL-^“来切换文件,这就需要知道文件所在的缓冲区编号。每次都使用”:ls“来找缓冲区编号很麻烦,所以我使用BufExplorer插件来显示缓冲区的信息。

BufExplorer插件在此处下载:http://vim.sourceforge.net/scripts/script.php?script_id=42

下载后,把该文件在~/.vim/目录中解压缩,这会在你的~/.vim/plugin和~/.vim/doc目录中各放入一个文件:

plugin/ bufexplorer.vim - bufexplorer插件
doc/ bufexplorer.txt    - bufexplorer帮助文件 

注:windows用户需要把这个插件解压在你的$vim/vimfiles或$HOME/vimfiles目录。

使用下面的命令生成帮助标签(下面的操作在vim中进行):

:helptags ~/.vim/doc 

然后,就可以使用”:help bufexplorer“命令查看BufExplorer的帮助文件了。

BufExplorer功能比较简单,这里就不做介绍了。我的vimrc里这样设置BufExplorer插件:

""""""""""""""""""""""""""""""
" BufExplorer
""""""""""""""""""""""""""""""
let g:bufExplorerDefaultHelp=0       " Do not show default help.
let g:bufExplorerShowRelativePath=1  " Show relative paths.
let g:bufExplorerSortBy='mru'        " Sort by most recently used.
let g:bufExplorerSplitRight=0        " Split left.
let g:bufExplorerSplitVertical=1     " Split vertically.
let g:bufExplorerSplitVertSize = 30  " Split width
let g:bufExplorerUseCurrentWindow=1  " Open in new window.
autocmd BufWinEnter \[Buf\ List\] setl nonumber 

BufExplorer已经映射了几个键绑定,例如,使用”,bv“就可以打开一个垂直分割窗口显示当前的缓冲区。

有一个称为minibufexpl.vim的插件,也可以把缓冲区列表显示出来,这个插件在此处下载:http://vim.sourceforge.net/scripts/script.php?script_id=159

使用这个插件后,屏幕截图看起来是这样,最上面一个窗口就是minibuffer窗口,列出了当前打开的缓冲区:

这个插件没有帮助文件,参考下载页上的说明,以及脚本代码来进行配置。

[winmanager插件]

winmanager插件可以把上面介绍的Explorer插件(vim 7.0以前的文件浏览插件)和BufExplorer插件集成在一起,我们上篇文章中介绍过的taglist插件也提供了对winmanager插件的支持。

Winmanager插件在这里下载:http://vim.sourceforge.net/scripts/script.php?script_id=95

下载后,把该文件在~/.vim/目录中解压缩,这会把winmanager插件解压到~/.vim/plugin和~/.vim/doc目录中:

plugin/winmanager.vim – winmanager插件
plugin/winfileexplorer.vim  - 改良的Explorer插件
plugin/wintagexplorer.vim – winmanager提供的tag插件,用处不大
doc/winmanager.txt – 帮助文件 

仍然用”:helptags ~/.vim/doc“命令来生成帮助标签,然后就可以使用”:help winmanager“来查看帮助了。

使用winmanager插件可以控制各插件在vim窗口中的布局显示。我的vimrc中这样设置:

""""""""""""""""""""""""""""""
" winManager setting
""""""""""""""""""""""""""""""
let g:winManagerWindowLayout = "BufExplorer,FileExplorer|TagList"
let g:winManagerWidth = 30
let g:defaultExplorer = 0
nmap <C-W><C-F> :FirstExplorerWindow<cr>
nmap <C-W><C-B> :BottomExplorerWindow<cr>
nmap <silent> <leader>wm :WMToggle<cr> 

g:winManagerWindowLayout变量的值定义winmanager的窗口布局,使用上面的设置,我们的窗口布局看起来是这样的:

左边有两个窗口,上面的是BufExplorer窗口,下面是taglist窗口。FileExplorer窗口和BufExplorer共用一个窗口,在BufExplorer窗口中使用”CTRL-N“可以切换到FileExplorer窗口,再使用一次则又切换回BufExplorer窗口。也就是说,在变量g:winManagerWindowLayout中,使用”,”分隔的插件,在同一个窗口中显示,使用”CTRL-N“在不同插件间切换;使用”|”分隔的插件,则在另外一个窗口中显示。

在屏幕右边的窗口则是主编辑区。

在上面的vimrc设置中,还定义了三个键映射,分别用于跳到左上窗口、左下窗口,以及显示/关闭winmanager窗口。

注:安装后,如果未设置g:winManagerWindowLayout变量,winmanager插件需要与BufExplorer插件一起才能使用。所以需要下载BufExplorer。

http://vim.sourceforge.net/scripts/script.php?script_id=1440有一个winmanager插件的修改版本,如果在FileExplorer中打开文件时,它会使用与该文件相关联的程序来打开该文件,而不是使用vim。我没有使用过这个插件,有兴趣你可以试试。

[参考文档]

<< 返回vim使用进阶: 目录

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/advanced-vim-skills-netrw-bufexplorer-winmanager-plugin/

文章的脚注信息由WordPress的wp-posturl插件自动生成

文本处理

25条评论 添加评论

  1. Easwy
    2009/02/13 14:53 | #1

    (以下为CSDN评论的转帖)

    #flyincosmic 发表于2007-05-02 23:25:06 IP: 220.192.43.*
    :e d:\tools调出来的实际上是fileExplore.vim
    不知如何显示出如上图的netrw directory list界面(windows xp vim7.0下)

    Explore类的命令也不可用,说处理function 6_StartExporler时发生错误,

    #met 发表于2008-01-16 19:05:35 IP: 220.173.106.*
    请问为什么将映射写入_vimrc之后没有办法像您那样用,**快捷方式? 在win下

    #easwy 发表于2008-01-17 09:45:18 IP: 213.70.90.*
    可能你的和我的不同,使用:echo mapleader命令查看一下你的mapleader是什么
    如果你没做更改的话,缺省应该是\而不是,
    所以你的快捷方式应该用\**。

    #met 发表于2008-01-19 18:21:56 IP: 220.173.106.*
    显示无mapleader命令

    #easwy 发表于2008-01-21 09:20:38 IP: 213.70.90.*
    :echo mapleader

  2. Easwy
    2009/02/13 14:53 | #2

    (以下为CSDN评论的转帖)

    #yeah2000 发表于2008-01-21 16:54:43 IP: 123.116.238.*
    您好,我下载了您的.vim 和vimrc,而且安装了其他需要安装的插件,可是我为什么看不到您 的这种窗口布局效果呢(他们在加载的时候没有出现任何错误)
    谢谢!

    #yeah2000 发表于2008-01-21 17:04:51 IP: 123.116.238.*
    不好意思,是我刚才没有看懂,现在明白了

    #snzf110 发表于2008-09-19 16:11:09 IP: 117.41.132.*
    我的ubuntu8.04 ~/.vim 根本就是一个文件,不是目录

  3. kamido
    2009/04/08 01:05 | #3

    楼主的VIM系列文章确实水平很高啊,在网上看到这么高水平的文章不多。楼主的系列文章把俺的VIM也打造了个新模样。原来俺只用lookupfile, ctags, cscope,还有devhelp.vim。我觉得已经很强大了,基本上可以实现Source Insight里常用的功能了。加了这里学到的taglist, bufexplorer, winmanager。哈哈,越来越有IDE的影子了。

  4. 2009/04/10 10:33 | #4

    @kamido
    如果你想拥有IDE的影子,你还可以试试project插件 :-)

  5. 森然
    2009/04/25 09:15 | #5

    你好,我在 XP3 下安装了这个插件,左侧显示的是 FileExplorer 和 TagList 窗口,但在我用鼠标双击 TagList 项时,TagList 窗口就会自动的向上增长,如果手动调整好TagList 窗口的高度后,再双击还是会自动的向上增长,奇怪的是,我如果再打开一个文件(就是有多个缓冲区)时,再双击就不会自动向上增长了.这是什么原因呢?望指教.

  6. 2009/04/28 10:05 | #6

    @森然
    这是因为buffer explorer插件会自动调整窗口的高度,似乎没有选项可以关闭这一功能,可能要直接改插件源文件。

  7. lzhan
    2009/06/27 11:14 | #7

    你好!如大虾所说配好了,但是我在wmmanager窗口中用回车无法打开对应的文件,不知道为什么。望指教,谢谢。

  8. 2009/06/29 10:53 | #8

    @lzhan
    把错误提示信息发出来。

  9. lzhan
    2009/06/29 15:59 | #9

    没有错误信息,回车之后就自动跳到主操作窗口现有文件中了,并不会打开对应文件。但是如果文件是已经打开存在在缓冲区中的,回车之后会在主操作窗口中显示。

  10. 2009/06/30 09:51 | #10

    @lzhan
    我没遇到过….你用的是winmanager自带的fileexplorer插件吗?
    另外,检查一下你的winmanager的配置

  11. lzhan
    2009/07/01 14:41 | #11

    哦,估计是我文件夹放得太深,而且用的link进去的。。。移到 ~/ 下面就是正常的了。。。。thank you~

  12. 2009/07/02 09:18 | #12

    @lzhan
    和文件夹深应该无关,大概是用link的缘故…有时我也觉得link怪怪的

  13. 2009/07/09 20:37 | #13

    [...] vim使用进阶: 使用标签(tag)文件 vim使用进阶: 使用taglist插件 vim使用进阶: 文件浏览和缓冲区浏览 vim使用进阶: lookupfile插件 vim使用进阶: 开启文件类型检测 vim使用进阶: [...]

  14. rushui999
    2009/09/06 12:16 | #14

    楼主,你的教程很好,我看完之后很有收获。现在指出一个小错误:
    BufExplorer已经映射了几个键绑定,例如,使用”,bv“就可以打开一个垂直分割窗口显示当前的缓冲区。

    这句话里面”,bv”应该改成”\bv”吧?官方上有这样一段话。

    description
    With bufexplorer, you can quickly and easily switch between buffers by using the one of the default public interfaces:

    ‘\be’ (normal open) or
    ‘\bs’ (force horizontal split open) or
    ‘\bv’ (force vertical split open)

  15. stone
    2009/09/08 13:33 | #15

    楼主,您好,您的教程写得很不错,但是,我有一个问题:

    windows下:
    nmap wm :WMToggle
    不能自己显示多窗口。

    我要写成:

    nmap :WMToggle

    然后,用快捷键才可以。
    请问这是为什么?
    谢谢。

  16. 2009/09/08 18:11 | #16

    @rushui999
    在我的vimrc中重新映射了mapleader,在前面的文章中有提到,所以是用,bv

    :help mapleader

  17. 2009/09/08 18:53 | #17

    @stone
    wordpress把<和>间的内容都过滤掉了,看不出你的映射有没有问题。把<写成&lt;再发一次
    你有没有设置mapleader?

    :help mapleader

  18. rushui999
    2009/09/12 20:46 | #18

    Easwy :
    @rushui999
    在我的vimrc中重新映射了mapleader,在前面的文章中有提到,所以是用,bv
    :help mapleader

    嗯,果然不错,你是自己重新定义了,呵呵,最开始看你的前面的部分的时候,才接触vi,看得不是很懂,也就没有留心看。

  19. karl
    2010/01/12 15:39 | #19

    我用lookup插件,不知道为什么没法用正则*等配置?
    而且刚打开lookup插件可以查找文件,输入字符后删掉几个再输,文件就不会再出来了

  20. karl
    2010/01/12 15:40 | #20

    在Lookup窗口输入:
    java
    <<>>
    /root/source/android2.0/eclair/build/core/base_rules.mk

    匹配出来的文件没有java啊

  21. karl
    2010/01/12 15:44 | #21

    java
    <<>>
    /root/source/android2.0/eclair/build/core/base_rules.mk

  22. absolute8511
    2010/02/05 18:06 | #22

    你好,请问如何让winmanager显示在右边阿?
    还有,如何让Project插件的窗口也加到winmanager里面?

  23. 2010/02/07 12:24 | #23

    @absolute8511
    winmanager默认是显示在左边,要显示在右边,可能要自己改插件的代码。

    你先试试project.vim支不支持winmanager。如果它不支持,想加进来要自己写一些vim脚本,看这里:
    :help winmanager-adding

  24. absolute8511
    2010/02/08 00:07 | #24

    @Easwy
    唉,看了一下,好麻烦,要写一些函数。博主有空搞搞啊,造福群众,^_^

  25. 2010/02/08 21:25 | #25

    @absolute8511
    呵呵,我没用过project插件

评论本文