2

我通常将我的 Vim 屏幕分成两个垂直窗口,每个窗口都可以进一步水平拆分。有时,我想添加或删除垂直窗口。有没有办法检测有多少顶级垂直分割并根据需要添加或删除vsplit?

例如,假设我的屏幕如下所示:

+--------+--------+
|        |        |
|        |        |
+--------+        |
|        |        |
|        |        |
|        +--------+
|        |        |
+--------+--------+

我想:Columns 1给我

+--------+
|        |
|        |
+--------+
|        |
|        |
|        |
|        |
+--------+

通过关闭最右边的两个窗口。

我什么也不想做:Columns 2,检测到两列已经打开。

我想:Columns 3给我

+--------+--------+--------+
|        |        |        |
|        |        |        |
+--------+        |        |
|        |        |        |
|        |        |        |
|        +--------+        |
|        |        |        |
+--------+--------+--------+

如果该函数忽略水平拆分中的垂直拆分,我很好。例如,如果我有

+--------+
|        |
|        |
+---+----+
|   |    |
|   |    |
|   |    |
|   |    |
+---+----+

我跑了:Columns 2,我会得到

+--------+--------+
|        |        |
|        |        |
+---+----+        |
|   |    |        |
|   |    |        |
|   |    |        |
|   |    |        |
+---+----+--------+
4

1 回答 1

0

确实有办法,但牵涉其中;第一步是计算当前打开的垂直窗口,我不知道有任何内置函数可以促进这一点。我发现的工作方法基本上是从第一个窗口开始(第一个窗口的顶部 - 如果不是第一个的全部 - 垂直分割),然后使用wincmd l,移动到右侧的下一个窗口只要wincmd l移动到一个新窗口,将每个窗口添加到包括第一个窗口在内的打开的垂直窗口的计数中。(我认为这就是 Gary Fixler 在对问题的评论中提到的。)

我开始尝试编写在这里发布的代码,它变得比我想要放入的任何函数都大~/.vimrc,所以我最终把它变成了一个插件,采用上述方法并提供:Columns命令;请参阅Columcille(在 vim.org 上http://www.vim.org/scripts/script.php?script_id=4742。)该插件还提供了一个类似管理水平分割窗口的命令::Rows分割当前列(或主窗口,如果没有打开的垂直分割)到指定数量的“行”。</p>

于 2013-10-04T21:38:36.833 回答