我通常将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
将当前列(或主窗口,如果没有打开的垂直分割)划分为指定数量的"行"