Usr_22

Nvim :help 页面,生成 来自 源代码,使用 tree-sitter-vimdoc 解析器。


VIM 用户手册 - 作者 Bram Moolenaar
查找要编辑的文件
文件可能位于任何位置。那么如何找到它们呢?Vim 提供了多种方法来浏览目录树。有一些命令可以跳转到另一个文件中提到的文件。Vim 还记得之前编辑过哪些文件。
22.1 文件浏览器 22.2 当前目录 22.3 查找文件 22.4 缓冲区列表
下一章:usr_23.txt 编辑其他文件 上一章:usr_21.txt 离开并回来 目录:usr_toc.txt

文件浏览器

Vim 有一个插件可以让你编辑目录。试试这个
:edit .
通过自动命令和 Vim 脚本的魔力,窗口将被目录的内容填满。它看起来像这样
" ============================================================================
" Netrw 目录列表 (netrw v109)
" 按名称排序
" 排序顺序:[\/]$,\.h$,\.c$,\.cpp$,,\.info$,\.swp$,\.o$\.obj$,\.bak$
" 快速帮助:<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 使用 预览窗口 netrw-p P 在前一个窗口中编辑 netrw-P t 在新标签页中打开文件 netrw-t
以下普通模式命令可用于控制浏览器的显示
i 控制列表样式(薄、长、宽和树)。长列表包含大小和日期信息。 s 反复按 s 会改变文件的排序方式;可以按名称、修改时间或大小排序。 r 反转排序顺序。
作为额外普通模式命令的示例
cd 将 Vim 对当前目录的认识更改为与浏览器目录相同。(参见 g:netrw_keepdir 来控制这个,也是) R 重命名光标下的文件或目录;将提示输入新名称。 D 删除光标下的文件或目录;将发出确认请求。 mb gb 设置书签/转到书签
你也可以使用命令模式;同样,只是一些示例
:Explore [directory] 浏览指定/当前目录 :NetrwSettings 你的当前 netrw 设置的完整列表,带有帮助链接。
netrw 浏览器不仅限于你的本地机器;你可以使用以下 URL:(结尾的 / 很重要)
:Explore ftp://somehost/path/to/dir/ :e scp://somehost/path/to/dir/
参见 netrw-browse 以了解更多信息。

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 命令时,它将返回使用共享目录。

标签本地目录

当你打开一个新的标签页时,它会使用打开新标签页之前所在的标签页中的窗口的目录。你可以使用 :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" 目录中查找文件,该目录位于使用 "gf" 的文件所在的目录之下。因此,在 "inits.h" 上使用 "gf" 会让 Vim 从文件所在的目录开始查找 "proto/inits.h"。如果没有 "./",即 "proto",Vim 将在当前目录下的 "proto" 目录中查找。而当前目录可能不是你正在编辑的文件所在的目录。
'path' 选项允许你以更多的方式指定要搜索文件的目录。参见 'path' 选项的帮助。 'isfname' 选项用于决定哪些字符包含在文件名中,哪些字符不包含(例如,上面示例中的 " 字符)。
当你知道文件名,但它在文件中找不到时,你可以键入它
:find inits.h
Vim 然后将使用 'path' 选项尝试找到该文件。这与 ":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' 选项被设置了一样。你也可以自己设置此选项。效果是,当任何缓冲区被放弃时,它会变成隐藏的。小心!当你有包含更改的隐藏缓冲区时,不要在确保保存所有缓冲区之前退出 Vim。

非活动缓冲区

当一个缓冲区被使用过一次后,Vim 会记住一些关于它的信息。当它没有在窗口中显示并且它没有被隐藏时,它仍然在缓冲区列表中。这被称为非活动缓冲区。概述
活动 出现在窗口中,文本已加载。 隐藏 不在窗口中,文本已加载。 非活动 不在窗口中,没有加载文本。
非活动缓冲区会被记住,因为 Vim 会保留关于它们的信息,例如标记。记住文件名也很有用,这样你就可以看到你编辑过哪些文件,以及再次编辑它们。

列出缓冲区

使用以下命令查看缓冲区列表
:buffers
一个执行相同操作的命令,不那么容易列出缓冲区,但输入起来短得多
:ls
输出可能看起来像这样
1 #h "help.txt" 行 62
2 %a + "usr_21.txt" 行 1
3 "usr_toc.txt" 行 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
主要
命令索引
快速参考