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



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

例如,假设我的屏幕是这样的:

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

我想让:Columns 1给我

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

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

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

我想让:Columns 3给我

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

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

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

,然后运行:Columns 2,得到

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

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

我开始尝试写代码张贴在这里,它变得比任何功能我想把我的~/.vimrc,所以我最终把它变成一个插件采取上述方法,并提供:Columns命令;参见Columcille (vim.org网址:http://www.vim.org/scripts/script.php?script_id=4742)。该插件还提供了一个类似的命令来管理水平分割窗口::Rows将当前列(或主窗口,如果没有打开的垂直分割)划分为指定数量的"行"

最新更新