VIM自动调整焦点窗口大小

13

我正在逐渐学习vim及其强大的功能。 对于拆分窗口(主要是水平拆分),我有一个问题。 是否有一种方式可以自动调整当前选定的(焦点)窗口大小? 例如,设置为焦点窗口始终占据屏幕的70%。

每次使用Ctrl-w(数字)+/-并不是很高效,特别是当我经常在几个文件之间跳转时。

同时,如果只限于水平拆分的窗口,那就更好了。

3个回答

17

'winheight'设置确定当前窗口的最小行数。一些用户将其设置为999以进行“Rolodex模式”。以下代码将其设置为70%:

:let &winheight = &lines * 7 / 10

如果需要更高级的功能,可以通过:autocmd挂钩到WinEnter事件,然后通过:Nwincmd _将窗口高度设置为N。以下是一个简单的示例:

:autocmd WinEnter * execute winnr() * 2 . 'wincmd _'

有没有一种方法可以在垂直分割而不是水平分割的情况下执行第一个选项? - the pickle
2
@thepickle:是的,可以使用&winwidth&columns代替。 - Ingo Karkat

9
听起来你想要一个名为golden-ratio的工具:使用黄金比例自动调整窗口大小。
当我发现可以禁用"自动"部分时,我开始使用它并按照以下设置进行操作:
" Don't resize automatically.
let g:golden_ratio_autocommand = 0

" Mnemonic: - is next to =, but instead of resizing equally, all windows are
" resized to focus on the current.
nmap <C-w>- <Plug>(golden_ratio_resize)
" Fill screen with current window.
nnoremap <C-w>+ <C-w><Bar><C-w>_

听起来很有趣,我会试一试。 - GoTTimw
不能在飞机上说炸弹,但这个插件真的很棒 (y) - lkraav

4
我使用这些映射来分割屏幕:
nnoremap <C-j>  <C-w>j
nnoremap <C-k>  <C-w>k
nnoremap <C-h>  <C-w>h
nnoremap <C-l>  <C-w>l
nnoremap c<C-j> :bel sp new<cr>
nnoremap c<C-k> :abo sp new<cr>
nnoremap c<C-h> :lefta vsp new<cr>
nnoremap c<C-l> :rightb vsp new<cr>
nnoremap g<C-j> <C-w>j<C-w>_
nnoremap g<C-k> <C-w>k<C-w>_
nnoremap g<C-h> <C-w>h<C-w>_
nnoremap g<C-l> <C-w>l<C-w>_
nnoremap d<C-j> <C-w>j<C-w>c
nnoremap d<C-k> <C-w>k<C-w>c
nnoremap d<C-h> <C-w>h<C-w>c
nnoremap d<C-l> <C-w>l<C-w>c

这样,如果您想在不同的分屏之间切换,可以使用C-hjkl。如果您想“创建”一个分屏,可以使用cC-hjkl。如果您想最大化一个分屏,可以使用gC-hjkl。如果您想删除一个分屏,可以使用dC-hjkl
如果您想要70%的特定大小而不是最大化,可以使用:
nnoremap g<C-j> <C-w>j:let &winheight = &lines * 7 / 10<cr>

例如。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接