usr_22

usr_22.txt 适用于 Vim 9.0 版本。 最近更新: 2020年4月 VIM 用户手册 - by Bram Moolenaar 译者: Chimin Yen 寻找要编辑的文件 到处都是文件,你怎么查找它们呢?Vim 为我们提供了在目录树间浏览的种种方法。还有 若干命令让你从一个文件通过文件名跳转到一个文件。而且,Vim 还记着曾经编辑过哪些 文件。 22.1 文件浏览器 22.2 当前目录 22.3 查找文件 22.4 缓冲区列表 下一章: usr_23.txt 编辑特殊文件 前一章: usr_21.txt 离开和回来 目录: usr_toc.txt

22.1 文件浏览器

Vim 有个插件可以用来编辑一个目录。试一下这个命令: :edit . 借助魔术般的自动命令和 Vim 脚本功能,目录的内容被用来填充窗口。看起来就像这 样: " ============================================================================ " Netrw Directory Listing (netrw v109) " Sorted by name " Sort sequence: [\/]$,\.h$,\.c$,\.cpp$,*,\.info$,\.swp$,\.o$\.obj$,\.bak$ " Quick Help: <F1>:help -:go up dir D:delete R:rename s:sort-by x:exec " ============================================================================ ../ ./ check/ Makefile autocmd.txt change.txt eval.txt~ filetype.txt~ help.txt.info 你可以看到这样一些条目: 1. 浏览工具的名称和版本号 2. 浏览目录名 3. 排序方法 (可以是名字、时间或大小) 4. 名字如何排序 (目录优先,然后是 *.h 文件、*.c 文件,等等) 5. 如何得到帮助 (用 <F1> 键),然后是可用命令的概括列表 6. 文件列表,包括 "../",用户可以由此列出父目录。 如果你启用了语法高亮功能,那么,目录里不同部分就显示成不同颜色,让你比较容易辨 认它们。 你可以用普通模式下的 Vim 命令在文本内到处移动。例如,移动光标到一个文件名上并 按下 <Enter> 键。你就可以编辑那个文件了。要回到浏览器,再用一次 ":edit ." 或 ":Explore" 即可,按 CTRL-O 也行。 试一下把光标移至某个目录名,按 <Enter> 键。结果,浏览器就进了该目录,并把那里 的条目显示出来。对准第一个目录 "../" 按 <Enter> 键, 让你返回父目录。按 "-" 键 可达到同样的目的,且无须先把光标移到 "../" 条目上。 你可以按 <F1> 键获取关于 netrw 文件浏览器功能的帮助。帮助文字如下: 9. Directory Browsing netrw-browse netrw-dir netrw-list netrw-help MAPS netrw-maps <F1>.............Help.......................................|netrw-help| <cr>.............Browsing...................................|netrw-cr| <del>............Deleting Files or Directories..............|netrw-delete| -................Going Up...................................|netrw--| a................Hiding Files or Directories................|netrw-a| mb...............Bookmarking a Directory....................|netrw-mb| gb...............Changing to a Bookmarked Directory.........|netrw-gb| cd...............Make Browsing Directory The Current Dir....|netrw-c| d................Make A New Directory.......................|netrw-d| D................Deleting Files or Directories..............|netrw-D| <c-h>............Edit File/Directory Hiding List............|netrw-ctrl-h| i................Change Listing Style.......................|netrw-i| <c-l>............Refreshing the Listing.....................|netrw-ctrl-l| o................Browsing with a Horizontal Split...........|netrw-o| p................Use Preview Window.........................|netrw-p| P................Edit in Previous Window....................|netrw-p| q................Listing Bookmarks and History..............|netrw-qb| r................Reversing Sorting Order....................|netrw-r| (等等) <F1> 键把你带到 netrw 目录浏览内容的帮助页面。这是一个常规的帮助页面,同样常规 的 CTRL-] 跳转到带标签的帮助项目,而 CTRL-O 则返回。 要选择显示和编辑的文件: (光标在某文件名上) <enter> 在当前窗口打开文件 netrw-cr o 横向分割窗口并显示文件 netrw-o v 竖向分割窗口并显示文件 netrw-v p 使用 preview-window netrw-p P 在上次的窗口中编辑 netrw-P t 在新标签页中打开文件 netrw-t 接下来的普通模式命令用来控制浏览器显示: i 控制列表风格 (瘦、长、宽和树形)。长列表包含文件大小和 日期信息。 s 反复按 s 会改变文件排序的方式;可以按照名字、修改日期 或文件大小排序。 r 逆转排列顺序。 略举数例其它的普通模式命令: cd 把当前目录改成显示在窗口中的那个目录。(见 g:netrw_keepdir ,它也控制此行为) R 为光标下文件改名。Vim 将提示你提供新文件名。 D 删除光标下文件。Vim 将提示你确认删除动作。 mb gb 建立书签/转到书签 还有命令模式;还是一样,只举数例: :Explore [directory] 浏览指定/当前目录 :NetrwSettings 当前 netrw 设置的综合列表,带有帮助链接。 netrw 浏览器不限于你的本地机器;也可使用 url,如下: (拖尾的 / 是必需的) :Explore ftp://somehost/path/to/dir/ :e scp://somehost/path/to/dir/ 详见 netrw-browse

22.2 当前目录

正如外壳一样,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 命令以后,该窗口就回过头来又采用共享 的当前目录了。 标 签 页 本 地 目 录 打开新的标签页时,使用打开时所在的之前标签页窗口的目录。可以用 :tcd 命令来改 变当前标签页的目录。除了有局部于窗口的目录的窗口以外,同一标签页的所有窗口共享 此目录。任何此标签页上打开的新窗口会使用此目录为当前工作目录。在标签页中使用 :cd 命令不会改变有局部于标签页目录的标签页的工作目录。在标签页中使用 :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" 命令参数是另一个命令。":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:noet:ft=help:norl: