<< Back to man.ChinaUnix.net

USR_22

*usr_22.txt*    For Vim version 6.3.    最近更新:2005年3月

                     VIM 用户手册 - Bram Moolenaar 著
                  译者: Chimin Yen http://vimcdoc.sf.net

                              寻找要编辑的文件


到处都是文件, 你怎么查找它们呢? Vim 为我们提供了在目录树间浏览的种种方法. 还
有若干命令让你从一个文件通过文件名跳转到一个文件。而且, Vim 还记着曾经编辑过
哪些文件。

|22.1|  文件浏览器
|22.2|  当前目录
|22.3|  查找文件
|22.4|  缓冲列表

       下一章: |usr_23.txt|  编辑特殊文件
       前一章: |usr_21.txt|  离开和回来
         目录: |usr_toc.txt|


*22.1*  文件浏览器

Vim 有个插件可以用来编辑一个目录。试一下这个命令:

        :edit .

借助魔术般的自动命令和 Vim 脚本功能, 目录的内容被用来填充窗口。看起来就像这样:

        " Press ? for keyboard shortcuts 
        " Sorted by name (.bak,~,.o,.h,.info,.swp,.obj,.orig,.rej at end of list) 
        "= /home/mool/vim/vim6/runtime/doc/ 
        ../ 
        check/ 
        Makefile 
        autocmd.txt 
        change.txt 
        eval.txt~ 
        filetype.txt~ 
        help.txt.info 

你可以看到这样一些条目:
1.  用 ? 键取得文件浏览器功能的注释文字.
2.  第二行提到怎样列表目录里的条目. 它们可以按好几种方式排序.
3.  第三行是当前目录名.
4.  "../" 是父目录.
5.  子目录名.
6.  普通文件名. 如同再第二行提到的,某些文件在目录表末尾,
7.  另类普通文件名. 考虑到你会经常用到这些另类, 才把它们移到末尾.

如果你启用了语法高亮功能, 那么, 目录里不同部分就显示成不同颜色, 让你比较容易
辨认它们.

你可以用普通模式下的 Vim 命令在文本内到处移动. 例如, 移动到一个文件名上并按下
<Enter> 键. 现在, 你就在编辑那个文件了. 要回到浏览器, 再用一次 ":edit ."即可,
按 CTRL-O 也行。
   试一下把光标移至某个目录名, 按 <Enter> 键. 结果, 浏览器就进了该目录, 并把
那里的条目显示出来. 对准第一个目录 "../" 按 <Enter> 键,  让你返回父目录. 按
"-" 键可达到同样的目的, 但无须先把光标移到 "../" 条目上。

你可以按 ? 键获取关于浏览器功能的简短帮助. 帮助文字如下:

        " <enter> : open file or directory 
        " o : open new window for file/directory 
        " O : open file in previously visited window 
        " p : preview the file 
        " i : toggle size/date listing 
        " s : select sort field    r : reverse sort 
        " - : go up one level      c : cd to this dir 
        " R : rename file          D : delete file 
        " :help file-explorer for detailed help 

开头几个命令让你选择一个文件来显示. 而文件出现在哪个窗口则取决于你选用的命令:

        <Enter>         利用当前窗口.
        o               开启一个新窗口.
        O               利用最近访问过的窗口.
        p               利用预览窗口, 并把光标撤回浏览器窗口. |preview-window|

接下来的几个命令用来显示其它信息:

        i               显示文件大小和日期. 再执行一次 i 命令将隐藏这些信息.
        s               根据光标所在的字段排序. 先以 i 命令显示文件大小和日期,
                        然后把光标移到任一文件的大小字段上, 并按 s 键. 文件条
                        目就依其大小排序了. 光标在日期字段上时按 s 键, 那么文
                        件条目就依其日期排序.
        r               逆转排列顺序 (大小或日期二者择一).

还有几个命令:

        c               把当前目录改成显示在窗口中的那个目录. 然后你就可以键入
                        ":edit" 命令编辑其中某个文件, 而无须冠以整个路径.
        R               为光标下文件改名. Vim 将提示你提供新文件名.
        D               删除光标下文件. Vim 将提示你确认删除动作.


*22.2*  当前目录

正如 shell 一样, Vim 也有当前目录的概念. 假设你在宿主目录内, 并要编辑几个储存
在目录 "VeryLongFileName" 下的文件. 你可以这样做:

        :edit VeryLongFileName/file1.txt
        :edit VeryLongFileName/file2.txt
        :edit VeryLongFileName/file3.txt

为了避免太多的键击, 你可以这样做:

        :cd VeryLongFileName
        :edit file1.txt
        :edit file2.txt
        :edit file3.txt

":cd" 命令可以用来改变当前目录. 你可以用 ":pwd" 命令来查看当前目录使什么:

        :pwd
        /home/Bram/VeryLongFileName

Vim 记得最近访问过的那个目录. 你可以用 "cd -" 命令回去那儿. 例如:

        :pwd
        /home/Bram/VeryLongFileName
        :cd /etc
        :pwd
        /etc
        :cd -
        :pwd
        /home/Bram/VeryLongFileName
        :cd -
        :pwd
        /etc


窗 口 本 地 目 录

当你把窗口一分为二以后, 两个窗口的当前目录是一样的. 而当你要在新窗口内编辑几个
存放在当前目录以外某处的文件时, 你可以让新窗口采用不同的当前目录, 同时保持原窗
口当前目录不变. 新窗口采用的当前目录称为本地目录.

        :pwd
        /home/Bram/VeryLongFileName
        :split
        :lcd /etc
        :pwd
        /etc
        CTRL-W w
        :pwd
        /home/Bram/VeryLongFileName

只要你不发出 ":lcd" 命令, 所有窗口共享同一个当前目录. 在一个窗口执行一次 ":cd"
命令, 也同时改变其它窗口的当前目录.
   执行过 ":lcd" 命令的窗口记得它特有的当前目录. 在其它窗口执行 ":cd" 或 ":lcd"
命令对它毫无影响.
   在一个采用特有当前目录的窗口执行 ":cd" 命令以后, 该窗口就回过头来又采用共享
的当前目录了.


*22.3*  查找文件

假定现在你在编辑一个 C 程序, 该程序有这样一行:

        #include "inits.h" 

你想要查看文件 "inits.h" 里有些什么. 把光标移到该文件名上, 并键入:

        gf

Vim 就会找到并打开这个文件.
   那么, 如果该文件不在当前目录里怎么办? Vim 将利用 'path' 选项来寻找这个文件.
该选项是一系列目录名, Vim 会在其中为你寻找文件.
   假设你把你的头文件存放在目录 "c:/prog/include" 里.  下面这个命令把该目录加入
'path' 选项:

        :set path+=c:/prog/include

这个目录名是一绝对路径. 不管你在哪儿, 它都指向同一目录. 如果你已经知道要编辑的
文件位于当前文件所在目录下某个子目录里, 你该怎么办呢? 那样的话, 你可以指定一个
相对路径. 相对路径以 "." 开始:

        :set path+=./proto

这个命令告诉 Vim 到目录 "proto" 里找文件, 而 "proto" 则位于你在其中用了 "gf"
命令的文件所在的目录下面. 如此一来, 对 "inits.h" 用 "gf" 命令, 就让 Vim 以当前
文件所在目录为起点, 寻找 "proto/inits.h".
   如果不加 "./", 只用 "proto", Vim 就会进入当前目录下的 "proto" 目录寻找. 然而
当前目录可能不是你在编辑的这个当前文件所在的目录.

'path' 选项还允许你用其它许多方法来指定在其中寻找文件的目录. 参见关于 'path'
选项的帮助.
   'isfname' 选项用来决定哪些字符可用于文件名, 以及哪些不可以 (如上例中的双引号
 " 字符).

当你要找的文件名没出现在你编辑的文件里时, 你可以键入这个文件名:

        :find inits.h

然后 Vim 就利用 'path' 选项来确定该文件的位置.  这就跟 ":edit" 命令一样, 只不
过 ":edit" 命令不用 'path' 选项.

要在新窗口内打开那个已经找到的文件, 用 CTRL-W f, 而不是 "gf", 或用 ":sfind"
而不是 ":find".

有个好办法可以直接启动 Vim 来编辑 'path' 中的某个文件:

        vim "+find stdio.h"

这会在你的 'path' 中查找 "stdio.h"。双引号是必需的,用来把括起来的当做一个参数
|-+c|。


*22.4*  缓冲列表

Vim 编辑器使用术语缓冲来描述编辑当中的文件. 实际上, 缓冲是你编辑的文件的副本. 你
修改完缓冲, 就把缓冲的内容写进文件. 缓冲不仅存放文件内容, 而且还存放着全部标记,
设定, 以及其它跟被编辑文件相关的东西.


隐 性 缓 冲

假设你在编辑文件 one.txt, 同时又要编辑文件 two.txt. 你本来可以简单地用 ":edit
two.txt" 来办到, 但由于你已经修改了 one.txt, 那样做就没用了. 而你又不想在此时
就把 one.txt 存盘. Vim 可以为你解决这个问题:

        :hide edit two.txt

缓冲 "one.txt" 从屏幕消失, 但 Vim 仍然知道你在编辑这个缓冲, 因而保留着它修改过
的文本. 这样的缓冲称为隐性缓冲: 缓冲存放着文本, 但你看不见它.
   命令 ":hide" 的参数是另一个命令. 它使得那个命令表现得就像 'hidden' 选项已被
设定. 你也可以不用 ":hide" 命令而设定 'hidden' 选项. 其作用是当离开任何缓冲时,
该缓冲被变成为隐性缓冲.
   小心! 当你的隐性缓冲已经改动, 千万不要在所有缓冲存盘之前就退出 Vim.


惰 性 缓 冲

   一个缓冲一经使用, Vim 就记住了一些有关该缓冲的信息. 即使它既不显示在窗口内,
又非隐性缓冲, 它也仍然在缓冲列表上. 这样的缓冲称为惰性缓冲. 一般而言,

   活性               显示在窗口内, 并加载文本
   隐性               不显示在窗口内, 但加载文本
   惰性               不显示在窗口内, 不加载文本

惰性缓冲不会被遗忘, 因为 Vim 保存着关于它们的信息, 如标记等. 而且记住文件名有
个好处, 你可以调阅你编辑过的文件名, 再次编辑它们.


缓 冲 列 表

你可以用这个命令查看缓冲列表:

        :buffers

另一个作用相当的命令, 虽然意思不那么明白, 但键入时省事多了:

        :ls

其输出可能像这样:

  1 #h  "help.txt"                      line 62 
  2 %l+ "usr_21.txt"                    line 1 
  3     "usr_toc.txt"                   line 1 

第一栏存放缓冲号. 你可以利用它来编辑文件, 而不用键入文件名, 参见下文.
紧随缓冲号的是些标记. 然后是文件名, 以及光标最后一次停留的行数.
   可能出现的标记有以下这些 (自左至右):

        u       表列外缓冲 |unlisted-buffer|.
         %      当前缓冲.
         #      替缓冲.
          l     活性缓冲, 缓冲被加载且显示.
          h     隐性缓冲, 缓冲被加载但不显示.
           =    只读缓冲.
           -    不可改缓冲,  'modifiable' 选项不设置.
            +   已修改缓冲.


编 辑 缓 冲

你可以通过指定其缓冲号来编辑一个缓冲, 而不必键入文件名:

        :buffer 2

但获知缓冲号的唯一途径是查阅缓冲列表. 如果不用缓冲号, 你可以用文件名, 或其部分:

        :buffer help

Vim 将为你键入的文件名找到最佳匹配. 如果只有一个缓冲与之匹配, 该缓冲就被选用.
在这个例子中, 被选中的就是 "help.txt".
   要在新窗口中打开一个缓冲:

        :sbuffer 3

这方法也适用于文件名.


使 用 缓 冲 列 表

你可以用这些命令在表列的缓冲间移动:

        :bnext          编辑下一个缓冲
        :bprevious      编辑前一个缓冲
        :bfirst         编辑第一个缓冲
        :blast          编辑最后一个缓冲

要从缓冲列表上删除一个缓冲, 用这个命令:

        :bdelete 3

同样, 这命令也适用于文件名.
   如果你删除了一个活性缓冲 (显示在窗口中的缓冲), 你也就关闭了该窗口. 如果你
删除了当前缓冲, 你也就关闭了当前窗口. 如果它是最后一个窗口, Vim 将找一个缓冲
来编辑. 你无法什么也不编辑!

        备注:
        即使用 ":bdelete" 命令删除了缓冲以后, Vim 依然记得它. 这个缓冲实际上
        成了 "表列外" 缓冲, 它不再出现在 ":buffers" 命令所报告的列表中.  而
        ":buffers!" 命令则将表列 "表列外" 缓冲 (没错, Vim 无所不能). 要让 Vim
        彻底忘记一个缓冲, 用 ":bwipe" 命令.  并参见 'buflisted' 选项.


下一章: |usr_23.txt|  编辑其它文件

版权: 参见 |manual-copyright|  vim:tw=78:ts=8:ft=help:norl:

Generated by vim2html on Wed Mar 2 23:08:44 GMT 2005