编写命令以增加或减少垂直分割的数量

时间:2013-05-15 03:09:56

标签: vim

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

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

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

我希望:Columns 1给我

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

关闭两个最右边的窗口。

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

我希望:Columns 3给我

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

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

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

然后我跑了:Columns 2,我会得到

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

1 个答案:

答案 0 :(得分:0)

确实有一种方法,但它涉及到;第一步是计算当前打开的垂直窗口,我不知道有什么内置功能可以实现这一点。我发现它的工作方法基本上是从第一个窗口开始(第一个窗口的顶部 - 如果不是整个第一个 - 垂直分割),然后使用wincmd l移动到下一个窗口只要wincmd l移动到一个新窗口,将每个窗口添加到包括第一个窗口的打开垂直窗口的计数中。 (我认为这是加里·莫特勒在问题评论中所提到的。)

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