在切换打开的文件时遇到 Vim 的问题

6

我在Vim中打开了多个文件。当我想从一个文件切换到另一个文件时,除非我保存文件或退出,否则Vim不允许我切换。有没有办法可以在我想要切换时不必每次都保存?这是Vim的问题还是我的错误?如果这就是Vim的工作方式,有人能告诉我逻辑上的原因吗?


1
我认为在你的.vimrc中加入:set hidden应该会有帮助。 - Dmitry Frank
3个回答

7

只需添加

set hidden

将以下内容添加到您的~/.vimrc文件中。这使得可以同时打开多个未保存的文件。

在此过程中,您还应该添加以下行:

set switchbuf=useopen,usetab

它会强制Vim跳转到已经打开的缓冲区中,就在那里,位于另一个分割窗口、另一个标签页中,而不是“隐藏”当前缓冲区以替换目标缓冲区。这对于快速修复相关的跳转以及:sb非常有用。

这两行代码是高效使用Vim缓冲区的关键。


嗨,感谢您的快速回复。没想到您能这么快地回复我。 - Parth Shah
如果我在使用vim时不添加“set switchbuf=useopen,usetab”是否可以?您能否详细说明添加该行的目的? - Parth Shah
1
当您从快速修复窗口跳转到错误时,默认行为是用带有错误的缓冲区替换当前缓冲区。如果带有错误的缓冲区已经在窗口或选项卡中打开,则此设置将使您跳转到该窗口或选项卡。使用此设置,可以像使用:sb:sbn:sbp命令一样高效地在缓冲区之间移动,而:b:bn:bp命令则不关心此设置并替换当前缓冲区。因此,如果您使用窗口和选项卡,则应添加此行,但如果您只使用单个窗口,则不需要添加。 - romainl

1
使用:n!命令。这将跳转到下一个文件,忽略更改并不保存它们。

我在想是否有一个相当于_CONTROL-SHIFT-6_的等效键(可以在最近使用的两个缓冲区之间切换)... - jahroy
嗨,CrazyCasta, 使用:n!不能满足我的需求。它的作用是在移动到下一个文件时丢弃我所做的更改。 - Parth Shah

0
你也可以在vim中使用标签页;使用:tabnew file.txt打开一个新的标签页,并加载file.txt。然后,你可以使用gtgT在打开的标签页之间前进和后退。我发现这比处理缓冲区更容易,但我是一个相对较新的vim用户。

这是完全错误的方法。如果你不“处理缓冲区”,你就无法使用许多Vim的有用功能。 - Dmitry Frank
@DmitryFrank,你能详细说明一下使用vim标签页所缺少的一些有用功能吗? - Cory Kendall
标签页不是缓冲区的替代品。当然,你可以使用标签页,但不要仅使用标签页,因为这样你就无法使用 Vim 的窗口(:help windows),这是 Vim 极其强大的功能。而且有许多插件可以使切换缓冲区更容易。我能想到的是 "ctrlp" 或 "buffet" 插件,但还有很多其他插件。 - Dmitry Frank
我认为这种方法是错误的:Vim的“标签页”与其他编辑器中的标签完全不同。它们更像工作区,不应被视为“文件”的代理。 - romainl
@romainl 嗯,有道理。我应该删除我的回答,编辑它,还是保留它并附上这个评论?我可以考虑删除它。 - Cory Kendall
不,留着吧,评论可以为答案和讨论增添价值。我删除了一些回答,因为它们让我看起来像个混蛋,或者完全离题,但你的回答非常准确。你提出的解决方案可能不是“正确的”,但仍然是一个有效的答案。 - romainl

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