在VIM中访问多个文件

12

《Unix in a Nutshell》一书在第572-573页讨论了访问多个文件的问题。有些命令非常有用,例如":e"、":e #"、":e new_file"、":n files"、":args"、":prev" 和 ":n!"。这些命令使我感到困惑:

":n 编辑列表中的下一个文件。"

":args 显示要编辑的文件列表。"

":prev 编辑列表中的上一个文件。"

当我执行":args"命令时,我看不到真正的文件列表。只有一个小文本出现在角落里。我想看到我使用":e"访问的所有文件,即缓冲区中的文件列表。

当我执行":n files"命令时,在哪里可以看到文件列表?":prev" 和 ":n" 命令应该做什么?我得到了错误消息:

There is only one file to edit.


关于最后一部分:如果您只打开了一个缓冲区,那么您无法切换它们(因为只有一个是打开的)。 - Rook
5个回答

18

我没有阅读提到的这本书,但我会尝试解释vim如何处理文件。

Vim有缓冲区。您可以使用以下命令打开每个文件:

:e 文件名.txt(将文件加载到缓冲区,即“打开文件”)

您也可以使用以下命令:

:e *.txt

在执行此操作时,有用的选项包括:

:set laststatus=2(始终显示状态栏)

:set wildmenu(方便打开文件)

如果您使用的是标准vim及其netrw插件,则可以使用以下命令之一:

:e .(其中之一是vim的文件管理器)

要管理缓冲区:

:ls将列出当前打开的缓冲区(文件)列表

:bnext:bprevious(或:bn:bp)可让您在缓冲区之间循环

:bd关闭缓冲区/文件(缓冲区已完成)

其他缓冲区类型用于其他目的(复制/粘贴,临时,vim的内部等)


缓冲区的符号和Emacs中的一样吗?有趣的是,该书仅为Emacs定义了缓冲区 :( 它指出:“当您在Emacs中打开一个文件时,该文件被放入缓冲区。 - 在任何时候您所拥有的缓冲区内容视图被称为窗口。” 缓冲区和窗口是否与Vim中的不同? - Léo Léopold Hertz 준영
1
是的,你可以这么说。在可用缓冲区类型上有一些差异,但原则上就是这样。关于emacs,我不太确定,他有窗口/框架...而vim有窗口/标签。关于vim:窗口只是显示vim缓冲区内容的一种方法。标签是在屏幕上显示多个窗口的一种方法(vim中的标签最近才被引入)。 - Rook
2
我认为 :e *.txt 不能用于打开多个文件。不过,:next 看起来是可以的:https://dev59.com/qmct5IYBdhLWcg3wKqQd#12304605 - Kyle Strand

9
除了Jonathan Leffler所说的之外,如果您不使用命令行从多个文件调用Vim,则可以在打开Vim后通过以下方式设置Vim的参数列表:
:args *.c

请注意,参数列表与您从:ls获取的打开缓冲区列表不同。即使您关闭了Vim中的所有打开缓冲区,参数列表仍然保持不变。 :n:prev可能会在Vim中打开全新的缓冲区(如果该文件的缓冲区尚未打开),也可能将您带到现有缓冲区。
类似地,您可以在Vim中打开多个缓冲区而不影响参数列表(即使参数列表为空)。 :e打开一个新缓冲区,但不一定会影响参数列表。打开的缓冲区列表和参数列表是独立的。如果您想遍历打开缓冲区列表而不是遍历参数列表,请使用:bn:bp等命令。

5
为了理解这些命令,你需要执行以下操作:
vim *.c

例如,在一个包含20个C文件的目录中,每个单独的文件既没有下一个文件,也没有上一个文件,也没有显著的文件列表。


5
:n、:p、:ar、:rew和:last是用于在命令行参数列表上操作的命令。
例如:
> touch aaa.txt bbb.txt ccc.txt
> gvim *.txt

在aaa.txt中打开vim

:ar gives a status line

[aaa.txt] bbb.txt ccc.txt

:n moves to bbb.txt

:ar gives the status line

aaa.txt [bbb.txt] ccc.txt

:rew rewinds us back to the start of the command line arg list to aaa.txt

:last sends us to ccc.txt

:e ddd.txt edits a new file ddd.txt

:ar gives the status line

aaa.txt bbb.txt [ccc.txt]

因此,该命令集仅对初始命令行参数列表起作用。

3
为了明确,Vim有参数列表(argument list),缓冲区列表(buffer list),窗口(windows)和选项卡(tab pages)。 参数列表是您用vim调用的文件列表(例如: vim file1 file2); :n和:p命令与此一起使用。 缓冲区列表是您正在编辑的文件的内存副本列表,就像emacs一样。 请注意,启动时加载的所有文件(在参数列表中)也在缓冲区列表中。 尝试使用:help buffer-list获取更多信息。
窗口是缓冲区的视口。 将窗口视为您可以将缓冲区放置在其上以对其进行操作的“桌子”。 窗口可以为空,也可以显示其他窗口中也可以显示的缓冲区,您可以使用它来同时查看同一缓冲区的两个不同区域。 尝试使用:help windows获取更多信息。
选项卡是窗口的集合。 例如,您可以有一个带有一个窗口的选项卡,还可以有另一个带有两个垂直分隔的窗口的选项卡。 尝试通过:help tabpage获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接