我通常将我的Vim屏幕分成两个垂直窗口,每个窗口可以进一步水平分割。有时,我想添加或删除垂直窗口。有没有办法检测有多少顶级垂直分割,并根据需要添加或删除vsplits?
例如,假设我的屏幕如下所示:
+--------+--------+
| | |
| | |
+--------+ |
| | |
| | |
| +--------+
| | |
+--------+--------+
我希望:Columns 1
给我
+--------+
| |
| |
+--------+
| |
| |
| |
| |
+--------+
关闭两个最右边的窗口。
我希望:Columns 2
什么也不做,检测到两列已经打开。
我希望:Columns 3
给我
+--------+--------+--------+
| | | |
| | | |
+--------+ | |
| | | |
| | | |
| +--------+ |
| | | |
+--------+--------+--------+
如果函数忽略水平分割中的垂直分割,我很好。例如,如果我有
+--------+
| |
| |
+---+----+
| | |
| | |
| | |
| | |
+---+----+
然后我跑了:Columns 2
,我会得到
+--------+--------+
| | |
| | |
+---+----+ |
| | | |
| | | |
| | | |
| | | |
+---+----+--------+
答案 0 :(得分:0)
确实有一种方法,但它涉及到;第一步是计算当前打开的垂直窗口,我不知道有什么内置功能可以实现这一点。我发现它的工作方法基本上是从第一个窗口开始(第一个窗口的顶部 - 如果不是整个第一个 - 垂直分割),然后使用wincmd l
移动到下一个窗口只要wincmd l
移动到一个新窗口,将每个窗口添加到包括第一个窗口的打开垂直窗口的计数中。 (我认为这是加里·莫特勒在问题评论中所提到的。)
我开始尝试编写用于在此处发布的代码,并且它变得比我想要放在~/.vimrc
中的任何函数都要大,所以我最终把它变成了一个插件,它采用了上述方法并提供:Columns
命令;请参阅Columcille(在http://www.vim.org/scripts/script.php?script_id=4742的vim.org上。)该插件还提供了一个类似管理水平分割窗口的命令::Rows
分割当前列(或主窗口,如果有的话)没有打开垂直分割)到指定数量的“行”。