23 votes

Vim conserve la position de la fenêtre lors du changement de tampon

Un problème que j'ai rencontré avec Vim en général est que lorsque je change de tampon dans une fenêtre (soit :[n]b ou MiniBufExpl), la position du curseur reste la même, mais la fenêtre se positionne toujours de manière à ce que la ligne sur laquelle se trouve le curseur soit au milieu.

Cela m'ennuie vraiment, car je me souviens visuellement de l'emplacement des parties supérieure et inférieure de la fenêtre, et non de l'endroit où elles se trouveraient si le curseur était positionné au milieu de la fenêtre.

Existe-t-il un paramètre que je peux modifier pour préserver la position d'une fenêtre sur un tampon ?

38voto

poisonedbit Points 634

Il est intéressant de noter que cela ne m'a pas dérangé jusqu'à ce que je lise votre question, lol.

Essayez ça :

if v:version >= 700
  au BufLeave * let b:winview = winsaveview()
  au BufEnter * if(exists('b:winview')) | call winrestview(b:winview) | endif
endif

5voto

Adamski Points 1658

Ce script posté par @dnets place toujours le curseur en haut de l'écran pour moi, bien qu'à la même position dans le fichier.

Je l'ai changé en ceci (copié de http://vim.wikia.com/wiki/Avoid_scrolling_when_switch_buffers )

" Save current view settings on a per-window, per-buffer basis.
function! AutoSaveWinView()
    if !exists("w:SavedBufView")
        let w:SavedBufView = {}
    endif
    let w:SavedBufView[bufnr("%")] = winsaveview()
endfunction

" Restore current view settings.
function! AutoRestoreWinView()
    let buf = bufnr("%")
    if exists("w:SavedBufView") && has_key(w:SavedBufView, buf)
        let v = winsaveview()
        let atStartOfFile = v.lnum == 1 && v.col == 0
        if atStartOfFile && !&diff
            call winrestview(w:SavedBufView[buf])
        endif
        unlet w:SavedBufView[buf]
    endif
endfunction

" When switching buffers, preserve window view.
if v:version >= 700
    autocmd BufLeave * call AutoSaveWinView()
    autocmd BufEnter * call AutoRestoreWinView()
endif

Et cela fonctionne maintenant comme je le souhaite, l'écran et la position du curseur étant sauvegardés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X