vim调整窗口大小
vim中常见的工作流程是使用多个窗口同时查看和编辑各种文件。 但是,一旦打开,每个窗口的大小通常保持不变,除非明确调整大小。
更好的工作流程是使聚焦窗口的宽度自动扩展。

代码
这个行为只需要很少的vim脚本,已经成为我最喜欢的组件之一。 下面的代码段通过使用自动组调用WinEnter
vim事件上的函数来完成此操作。
augroup ReduceNoise
autocmd!
" Automatically resize active split to 85 width
autocmd WinEnter * : call ResizeSplits()
augroup END
function ! ResizeSplits ()
set winwidth = 85
wincmd =
endfunction
该函数的第一行将winwidth
设置为85。 数字代表活动窗口的列数,包括符号和行号列。 如果那些需要5列并且winwidth
设置为85,则将80列用于文本。
第二行wincmd =
,等于所有其他未聚焦窗口的宽度和高度; 参见: h wincmd
以获取更多信息和一些其他出色的窗口命令。
超越调整大小
上面是更实际的实现的精简版。 控制其他窗口设置可以减少未聚焦窗口上的额外噪声,从而增加正在进行的工作的信噪比。 其他一些想法包括:
- 在未聚焦的窗口中显示绝对行号,仅在聚焦的窗口中显示相对行号
- 仅在焦点窗口中显示符号列
- 仅在焦点窗口中显示光标线
- 禁用未聚焦窗口的语法设置
通过扩展上述自动组以包括一些其他自动命令(如下所示),可以轻松地启用这些设置。
autocmd WinEnter * setlocal cursorline
autocmd WinEnter * setlocal signcolumn=auto
autocmd WinLeave * setlocal nocursorline
autocmd WinLeave * setlocal signcolumn= no
当进入一个窗口时, cursorline
和signcolumn
被启用。 未聚焦的窗口将禁用这些设置。
现在,无论您做什么操作以及不喜欢在聚焦和不聚焦的窗口中看到的内容,都可以控制。 这可以包括活动窗口和非活动窗口的状态行( 每个窗口可以有自己的状态行设置:请参见vimrc中的示例 )。
陷阱
自动命令和调整大小功能在大多数情况下都能正常工作,但可能会产生一些意想不到的效果。 由NERDTree之类的插件创建的Windows或用于显示快速修复和位置列表的窗口在聚焦时可能会意外扩展。
解决此意外行为的一种方法是在调整大小函数中添加一些if语句,以便仅在活动窗口的文件类型不是NERDTree,快速修复或位置列表时才执行。 您可能不希望wincmd =
在这些窗口上运行时,因为它不仅等于所有打开的窗口的宽度,而且还等于所有打开的窗口的高度。
尽管存在这些(次要)缺点(其中大多数可以解决),但是这已成为我最喜欢和最有用的设置之一。 它是一种模式,直到您拥有它,您才知道自己错过了它。
和往常一样, 这是这些设置的vimrc以及其余的dotfiles 。
为此行为至少创建了一个插件: Lens.vim 。 如果插件对您的设置更具吸引力,那么它可以支持一些其他很棒的功能。
翻译自: https://hackernoon.com/automatic-window-resizing-in-vim-g9n3ueb
vim调整窗口大小