VIM自动调整焦点窗口

时间:2012-07-24 16:01:00

标签: vim

我正在慢慢学习vim及其强大的功能。 关于分割窗口(主要是水平分割),我有一个问题。 有没有办法自动调整当前所选(焦点)窗口的大小?例如,假设一个设置使得聚焦窗口总是占据屏幕的70%。

每次使用 Ctrl-w (数字) + / - 效率不高,尤其是当我在几个文件之间跳转时不断。

如果有办法将其限制为仅水平分割的窗口,那也很酷。

3 个答案:

答案 0 :(得分:15)

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

:let &winheight = &lines * 7 / 10

对于任何爱好者,您可以通过WinEnter挂钩:autocmd事件,然后通过:Nwincmd _将窗口高度设置为N.愚蠢的例子:

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

答案 1 :(得分:9)

听起来像你想要golden-ratio:使用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>_

答案 2 :(得分:3)

我将这些映射用于分屏:

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 。如果要“创建”拆分,可以使用 c C-hjkl 。如果要最大化分割,可以使用 g C-hjkl 。如果你想删除一个分割,你可以使用 d C-hjkl

如果你想特别使用70%而不是最大化你可以使用

nnoremap g<C-j> <C-w>j:let &winheight = &lines * 7 / 10<cr>

例如。