3

我知道我可以通过 :qall 关闭 vim 中所有打开的缓冲区。

我想关闭待处理的打开缓冲区的事件。
我在查看 P4 沙盒中的更改时遇到问题。当我对多个文件进行更改并尝试使用“P4 diff”查看我的代码并将我的 P4DIFF 设置为 vimdiff 时。
它会一一打开所有已更改文件的 vimdiff。现在,如果我有 10 个打开的文件,并且在查看 2 个文件后,我想关闭剩余 8 个文件的差异。我怎样才能做到这一点?

谢谢,

4

4 回答 4

0

这听起来像是仓促学习 Vimscript 的工作!特别是:bufdo,ifmatch语句!

尝试以下方法:

:bufdo if match(expand("%"), ".vim") >= 0 | bw | endif
  • bw用于buffer wipeEx 模式(:操作员)
  • expand("%")返回当前缓冲区的名称
  • match(string, pattern)找到 a patternin的索引string
  • |如果您处于 Ex 模式,则为单独的行

这匹配包含.vim在其文件名中的缓冲区并关闭这些缓冲区。

我猜如果这些是输入的临时缓冲区vimdiff,它们将没有文件名开头。也许你可以用它bufnr(".")来输出当前缓冲区的数量。然后,您可以关闭某个数字之后或之前的所有缓冲区。

您可能可以使用某些插件进行更多的缓冲区操作。我一直在考虑采用以下三个有助于管理插件的插件之一:

  • 精力充沛的探险家
  • 模糊查找器
  • minibufexpl 我不能说任何优点,但我已经在互联网和 IRC 上多次听到他们提到它们。
于 2011-10-06T05:07:41.857 回答
0

这是一个糟糕的技巧,但把它放在这里,因为没有其他答案对我有用。

在 .vimrc 顶部添加不带 qoutes 的 "qall"。

:e ~/.vimrc
:source ~/.vimrc
:q

所有文件打开后会自动关闭。

然后在 emacs 或 sed 中打开 vimrc 并删除 qall。

于 2015-03-08T06:58:30.567 回答
0

免责声明:我没有使用过 perforce,所以我不得不做出一个假设:当多个文件有未提交的更改时,它会像很多 VCS 一样运行配置的 diff 命令(在本例中为 vimdiff )依次更改文件(我认为这就是“打开所有已更改文件的 vimdiff”的意思)。

如果是这种情况,那么在查看任何特定文件的更改时,vim 将不会引用任何剩余文件,因此单个 vim 会话中的任何技巧都不会帮助您。

如果你愿意改变你的工作流程,你可以用我找到的这个 vim 脚本做一些事情:http: //www.vim.org/scripts/script.php? script_id=240

它声称是在 P4 GUI 之后建模的,因此希望可以巧妙地适合您的使用。从脚本的概述中,听起来它应该能够向您显示哪些文件已更改的摘要,并允许您查看更改。

如果这些都不适合你,你总是可以Ctrl-C在关闭文件的 vimdiff 会话后立即尝试旧的最爱。

于 2012-05-03T11:22:15.043 回答
0

我假设您打开 vim 时带有许多参数(称为...参数列表)。

您可能应该重置它:

 :args %

您还可以选择性地管理列表 ( :argdelete)。更多信息::he arglist

于 2011-10-06T08:42:37.887 回答