vim调整窗口大小_在Vim中自动调整窗口大小

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

当进入一个窗口时, cursorlinesigncolumn被启用。 未聚焦的窗口将禁用这些设置。

现在,无论您做什么操作以及不喜欢在聚焦和不聚焦的窗口中看到的内容,都可以控制。 这可以包括活动窗口和非活动窗口的状态行( 每个窗口可以有自己的状态行设置:请参见vimrc中的示例 )。

陷阱

自动命令和调整大小功能在大多数情况下都能正常工作,但可能会产生一些意想不到的效果。 由NERDTree之类的插件创建的Windows或用于显示快速修复和位置列表的窗口在聚焦时可能会意外扩展。

解决此意外行为的一种方法是在调整大小函数中添加一些if语句,以便仅在活动窗口的文件类型不是NERDTree,快速修复或位置列表时才执行。 您可能不希望wincmd =在这些窗口上运行时,因为它不仅等于所有打开的窗口的宽度,而且还等于所有打开的窗口的高度。

尽管存在这些(次要)缺点(其中大多数可以解决),但是这已成为我最喜欢和最有用的设置之一。 它是一种模式,直到您拥有它,您才知道自己错过了它。

和往常一样, 这是这些设置的vimrc以及其余的dotfiles 。

为此行为至少创建了一个插件: Lens.vim 。 如果插件对您的设置更具吸引力,那么它可以支持一些其他很棒的功能。

翻译自: https://hackernoon.com/automatic-window-resizing-in-vim-g9n3ueb

vim调整窗口大小

你可能感兴趣的:(python,java,linux,数据库,javascript)