2013-06-06 9 views
5

C'è un autocmd per quando la finestra di anteprima viene aperta/chiusa?Prevenire la finestra di anteprima Vim dallo spostamento principale

Voglio scorrere la finestra principale n allinea quando viene aperta la finestra di anteprima, quindi n linee giù quando è chiusa, per contrastare l'effetto "testo mobile" che si verifica in modo nativo.

Sono in grado di farlo con il relativo autocmd (e che cos'è), o c'è un modo migliore per me per raggiungere questo obiettivo?

risposta

1

Non esiste tale autocmd event. Ma è possibile utilizzare WinEnter e BufDelete associato all'opzione previewwindow per ottenere qualcosa di simile.

Utilizzando WinEnter è possibile controllare previewwindow; se si è nella finestra di anteprima, è possibile impostare una variabile di buffer per differenziare questo evento dagli eventi successivi che possono essere generati spostandosi in un'altra finestra e tornare alla finestra di anteprima. Puoi anche impostare au BufDelete <buffer> call MyRestoreMainWindow() per chiamare la tua funzione quando la finestra di anteprima è chiusa.

0

Vedo spesso questa domanda e sempre mi gratto la testa chiedendomi che cosa siano quelle persone che cambiano le finestre e che io non esperisco.

Bene, oggi è venuto in mente che due opzioni che ho aggiunto al mio ~/.vimrc molto tempo fa hanno il piacevole effetto collaterale di impedire che temuto finestra-shifting:

set splitbelow 
set splitright 

fare un tentativo !

+0

Ho quelli fissati così, sto parlando del movimento che si verifica quando uno: ': ps/qualcosa /', poi ': pclose'. –

+0

Hai ragione. Questo movimento si verifica solo quando il cursore è al di sotto del centro della finestra, però. Forse qualcosa come 'nnoremap ps zt: ps'? – romainl

+0

Voglio impedire il movimento ogni volta che si apre la finestra, in realtà non uso mai ': ps', era solo un esempio che mostrava il problema. –

0

In realtà mi stavo chiedendo la stessa cosa tranne che con la barra delle schede: come impedire che lo spostamento fastidioso si verifichi quando la barra delle schede viene visualizzata o nascosta. Hai considerato una funzione wrapper? Quanto segue sembra funzionare per l'esempio ps (sarà ancora causare uno spostamento se la finestra di anteprima potrebbe oscurare il cursore)

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

Mentre noi siamo qui ... il caso scheda bar sembra richiedere qualche magia nera . Cioè, come qualcuno ha sottolineato, la tabbar farà scorrere il testo verso il basso se il cursore si trova sopra la linea centrale (??). Ma questo sembra funzionare - per mostrare sempre una barra delle schede:

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

e di ripristinare la barra delle linguette originale impostazione

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

Dovresti semplicemente lasciare la barra delle schede sempre visibile. Non fa male essere sempre in grado di vedere quale file ci si trova dall'alto ... –