如何在 VIM 中编辑多个文件?

cwd*_*cwd 216 linux command-line vim files

我知道我可以vim通过执行类似的操作来打开多个文件vim 2011-12*.log,但是如何在文件之间切换并一次关闭一个文件?另外,我如何知道我正在编辑的当前文件的文件名?

bsd*_*bsd 233

首先,在 vim 中,您可以输入:(冒号),然后输入help help, ala:help以获取自助主题列表,包括一个简短的教程。在主题列表中,将光标移到感兴趣的主题上,然后按ctrl],该主题将被打开。

一个很好的起点是主题

|usr_07.txt|  Editing more than one file
Run Code Online (Sandbox Code Playgroud)

好的,继续你的回答。

使用文件列表启动 vim 后,您可以通过输入:next:n简称移动到下一个文件。 :wnext是写当前更改然后移动到下一个文件的缩写。

还有一个类似的:previous,:wprevious:Next。(请注意,这:p是 的简写:print。简写:previous:prev:N。)

要查看您在文件列表中的位置,请输入:args当前正在编辑的文件将出现在[](括号中)。

例子:

vim foo.txt bar.txt
:args
Run Code Online (Sandbox Code Playgroud)

结果:

[foo.txt] bar.txt
Run Code Online (Sandbox Code Playgroud)

  • :wn 是 :wnext 的缩写。 (38认同)
  • 关于多个 _buffers_ / _windows_ / _tabs_ 也请参阅 StackOverflow 的 [How to Effective work with multiple files in Vim?](http://stackoverflow.com/questions/53664/how-to-effectively-work-with-multiple-files -in-vim) 和 [使用 Vim 的选项卡如缓冲区](http://stackoverflow.com/questions/102384/using-vims-tabs-like-buffers)。 (5认同)
  • 我发现第 22 章“查找要编辑的文件”也非常有用。它继续使用目录资源管理器来编辑您想要的文件。 (2认同)

Han*_* N. 85

您可以在 vim 打开时打开另一个文件,:tabe filename并相应地切换到您键入的另一个文件:tabn:tabp下一个和上一个文件。

当您不在编辑模式下(即不在插入、替换等模式下)时,键盘快捷键gTgt也可用于切换选项卡。在某些系统上Ctrl+ Alt+Page UpCtrl+ Alt+Page Down也允许选项卡切换,但这并不总是有效(例如,它在“开箱即用”的 OS X 终端中不起作用)。

您可以在 vim 应用程序的顶部看到文件名。

  • 这个。还可以使用以下命令在选项卡中打开文件:`vim -p file1 file2` (27认同)
  • 旁白:如果你已经在 vim 中并且想要添加另一个文件,你可以使用:`:argadd filename` 然后使用 `:next`。同样,您可以使用 `:argdel filename` 删除编辑中的文件之一。 (7认同)
  • 请注意,选项卡不适用于多个文件。它们旨在与多个 **布局** 一起使用。见 [文章](https://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs/)。 (5认同)

Bir*_*rei 55

在缓冲区之间切换的命令:

:bf            # Go to first file.
:bl            # Go to last file
:bn            # Go to next file.
:bp            # Go to previous file.
:bw            # Close file.
Run Code Online (Sandbox Code Playgroud)

:help buffer 查找更多信息

要知道文件名,请使用Ctrl+ G:file:f

  • `:bw` 关闭文件哈哈。不要忘记阅读“:bw”的帮助,其中指出只有在知道自己在做什么的情况下才应该使用它。这没什么大不了的,但除非你想清除文件的所有标记和信息,否则最好像正常人一样使用 `:bd` 或 `:q` (2认同)

Not*_*Now 37

除了给出的答案之外,另一个选择是将窗口拆分为:

:sp
:vsp
Run Code Online (Sandbox Code Playgroud)

:vsp用于垂直拆分。然后用于Ctrl+W <ARROW_KEYS>在窗格中移动。

  • 你可以使用 `:vs` 代替 `:vsp` (5认同)
  • 或者甚至只是`Ctrl+W, v` 用于垂直拆分和`Ctrl+W, s` 用于水平拆分。 (3认同)
  • 我多年来一直在使用`CTRL+W`,最近我在网页中进行了大量的 VI 编辑。每次,我都不假思索地输入命令,然后……呜呜……浏览器选项卡不见了!我总是忘记。我真的需要学习一个新的捷径。 (2认同)

小智 19

:n -> Move to next file
:N -> Move to previous file
Run Code Online (Sandbox Code Playgroud)


xti*_*ian 14

我在超级用户处问了一个类似的问题,

“如何在不同的 bash 窗口和用 VI 打开的文件之间复制和粘贴?”

我的问题的答案是您不能,但是您可以使用 VIM 的:split命令在一个 bash 窗口中打开两个文件:

  1. 打开一个文件$ vim file1,使用:split file2命令在 VIM 中打开第二个文件。
  2. 或者,$ vim -o file1 file2从 bash使用。
  3. 在文件之间切换——切换活动文件——在 VIM 中使用ctrl- w ctrl- w
  4. 一个示例操作是在 file1 中复制(或 yank)yy,切换(3),然后将p内容粘贴(或放入)到 file2 中。
  5. 当任一窗口处于活动状态时,其他一切都正常,因此:q退出并:q!强制退出。

我的 bash 是黑白的,所以每个屏幕的文件名都被设置为一个反向的“选定”行,其中引用了文件名。

哇!


Cor*_*ein 10

我发现编辑多个文件最方便的方法是使用选项卡。您可以通过命令行在单独的选项卡中打开多个文件,如下所示:

vim -p file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

或者,如果您已经打开了 vim,您可以在新选项卡中打开一个新文件,如下所示:

:tabe file2.txt
Run Code Online (Sandbox Code Playgroud)

打开选项卡后,使用gt查看下一个选项卡和gT查看上一个选项卡。

您还可以使用 跳转到第一个选项卡,使用 跳转到1gt第二个选项卡2gt,等等。

您可以使用关闭标签 :tabc

最后,您可以将当前选项卡移动到第nth 位置,:ntabm其中 wheren是大于或等于 的任何数字0


Dyl*_*lan 7

argadd a/b c/d e/f
Run Code Online (Sandbox Code Playgroud)

argadd ...将所有文件添加到 args,也添加到:ls/:buffers并允许您编辑它们。


:h arglsit:h argedit:h argsd


此外,您只能使用 对 args 执行某些操作:argdo ...,并且您可以通过执行:argsd*.