USR_22

*usr_22.txt*	For Vim version 7.1.	最近更新:2006年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 %a+	"usr_21.txt"			line 1 
  3	"usr_toc.txt"			line 1 

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

	u	列表外缓冲区 |unlisted-buffer|。
	 %	当前缓冲区。
	 #	轮换缓冲区。
	  a	激活缓冲区,缓冲区被加载且显示。
	  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 2008年 03月 27日 星期四 17:04:45 CST