2016-02-24 1 views
0

autocmd VimResized * <foo> будет выполнять команду <foo> всякий раз, когда изменяется окно приложения vim. Есть ли способ запуска различных команд в зависимости от того, является ли изменение размера сжатым или растущим? И если да, есть ли какие-либо предостережения для консоли vim?Различные автовыключатели VimResized для сокращения и роста

+0

Консоль Vim никогда не вызовет/не получит это событие. – romainl

+0

@romainl Я уже запускал это событие в консоли vim. – user2141130

ответ

0

Окно 2-мерное, поэтому концепция сокращения или роста довольно неточна: вы говорите о высоте, о ширине или о площади?

Предположим, вы говорите об этом районе.

Простой способ сделать это - сохранить последний размер окна, при запуске и при каждом изменении размера выигрыша; то вы просто должны сравнить последний размер и новый, каждый раз, когда выигрыш изменяет размер:

" Defines a command to save the current dims: 
command! SaveVimDims let g:last_lines=&lines | let g:last_columns=&columns 

" Saves the dims on startup: 
au VimEnter * SaveVimDims 

" Calls the func below, each the win is resized: 
au VimResized * call VimResized_Func() 

function! VimResized_Func() 
    " Gets the area of the last dims: 
    let last_area = g:last_lines * g:last_columns 

    " Saves the new dims: 
    SaveVimDims 

    " Gets the area of the new dims: 
    let cur_area = g:last_lines * g:last_columns 

    " Compares the areas: 
    if cur_area < last_area 
     " do something when shrinking 
    else 
     " do something when growing 
    endif 
endf 

Это был испытан только с Gvim; Я никогда не использую Vim в консоли. Надеюсь, что это сработает