2013-06-06 14 views
5

Czy istnieje autocmd, gdy okno podglądu jest otwierane/zamykane?Zapobieganie wyświetlaniu okna podglądu Vim z przesunięciem głównym

Chcę przewinąć główne okno n linii, gdy jest otwarte okno podglądu, a następnie n linii w dół, gdy jest zamknięte, aby przeciwdziałać efektowi "ruchomego tekstu", który występuje natywnie.

Czy mogę to zrobić z odpowiednim autocmd (i co to jest), czy jest lepszy sposób, aby to osiągnąć?

Odpowiedz

1

Nie ma takiego autocmd event. Ale możesz użyć opcji WinEnter i BufDelete związanych z opcją previewwindow, aby osiągnąć coś podobnego.

Za pomocą WinEnter można sprawdzić previewwindow; jeśli jesteś w oknie podglądu, możesz ustawić zmienną buforową, aby odróżnić to zdarzenie od kolejnych zdarzeń, które można wygenerować, przechodząc do innego okna i powrócić do okna podglądu. Możesz również ustawić au BufDelete <buffer> call MyRestoreMainWindow(), aby wywołać twoją funkcję, gdy okno podglądu zostanie zamknięte.

0

Często widzę to pytanie i zawsze podrapuję się w głowę, zastanawiając się, o co chodzi, że ludzie, którzy przesuwają okna, nie mówią o tym.

Cóż, dzisiaj dotarło do mnie, że dwie opcje, które dodałem do mojego ~/.vimrc dawno mają przyjemny efekt uboczny zapobieganie że bał przesuwania okna:

set splitbelow 
set splitright 

Spróbować !

+0

mam wymienione, jak również, mówię o ruchu, który występuje, gdy jeden robi: ': ps/coś /', następnie ': pclose'. –

+0

Masz rację. Ten ruch pojawia się tylko wtedy, gdy kursor znajduje się poniżej środka okna. Może coś w stylu 'nnoremap ps zt: ps'? – romainl

+0

Chcę zapobiec ruchowi za każdym razem, gdy otworzy się okno, właściwie nigdy nie używam ': ps', był to tylko przykład pokazujący problem. –

0

Tak naprawdę zastanawiałem się nad tym samym wyjątkiem paska kart - jak zapobiec temu denerwującym zmianom, gdy pasek kart jest pokazywany lub ukrywany. Czy rozważałeś funkcję opakowania? Poniższa wydaje się działać na przykład ps (będzie nadal powodują przesunięcie jeśli okno podglądu będzie przesłaniać kursor)

se splitbelow splitright 
fun! PsWrapper(text) 
    let view=winsaveview() 
    exe 'ps' a:text 
    call winrestview(view) 
endfun 

Chociaż jesteśmy tu ... sprawa pasek kart wydaje się wymagać pewnej czarnej magii . Tj, jak ktoś zauważył, tabbar spowoduje przewijanie tekstu, jeśli kursor znajduje się powyżej środkowej linii (??). Ale to wydaje się działać - zawsze pokazać pasek kart:

let [view,g:stal]=[winsaveview(),&stal] 
let [view.topline,&stal]=[view.topline+!g:stal,2] 
call winrestview(view) 

i przywrócić pierwotne umieszczenie zakładek ustawień

let [view.topline,&stal]=[view.topline-!g:stal,g:stal] 
call winrestview(view) 
+0

Powinieneś zostawić pasek tabulacji zawsze widoczny. Nie zaszkodzi, aby zawsze móc zobaczyć, z jakiego pliku jesteś na górze ... –

Powiązane problemy