(I added &diff which fixes the issue with diff mode noted by John Backett.) |
(Removed stale b:winview to avoid bugs as the one reported in snipmate. - May 29, 2014 (https://github.com/garbas/vim-snipmate/issues/161 )) Tag: Visual edit |
||
Line 19: | Line 19: | ||
if v:version >= 700 |
if v:version >= 700 |
||
au BufLeave * if !&diff | let b:winview = winsaveview() | endif |
au BufLeave * if !&diff | let b:winview = winsaveview() | endif |
||
− | au BufEnter * if exists('b:winview') && !&diff | call winrestview(b:winview) | endif |
+ | au BufEnter * if exists('b:winview') && !&diff | call winrestview(b:winview) | unlet! b:winview | endif |
endif |
endif |
||
</pre> |
</pre> |
||
Line 32: | Line 32: | ||
==Comments== |
==Comments== |
||
+ | Removed stale b:winview to avoid bugs as the [https://github.com/garbas/vim-snipmate/issues/161 one] reported in snipmate. - May 29, 2014 |
||
+ | |||
As noted by [[User:JohnBackett|JohnBackett]] the autocommands should not be run in diff mode, this is accomplished with the "&diff" if test - Sep 21, 2012 |
As noted by [[User:JohnBackett|JohnBackett]] the autocommands should not be run in diff mode, this is accomplished with the "&diff" if test - Sep 21, 2012 |
||
Revision as of 21:18, 29 May 2014
created 2006 · complexity intermediate · author Yakov Lerner · version 7.0
When switching buffers using the Ctrl-^
and :bp
commands, Vim will keep the cursor on the line number where it was before switching the buffer but it might change the position of the current line relative to the screen. For example, the cursor may be in line 1234 of the file, with that line at the top of the screen. The user may switch to another buffer, then switch back (:bn :bp
), and find that the current line has been repositioned to the middle of the screen.
If the line number is restored correctly, but the shift in screen view is bothersome, add the following autocommands to the .vimrc file to restore the screen view correctly:
" When switching buffers, preserve window view. if v:version >= 700 au BufLeave * if !&diff | let b:winview = winsaveview() | endif au BufEnter * if exists('b:winview') && !&diff | call winrestview(b:winview) | unlet! b:winview | endif endif
Alternatively a user can :set scrolloff=999
which keeps the current line vertically centered.
See also
Comments
Removed stale b:winview to avoid bugs as the one reported in snipmate. - May 29, 2014
As noted by JohnBackett the autocommands should not be run in diff mode, this is accomplished with the "&diff" if test - Sep 21, 2012
This tip results in a display bug that hasn't been patched yet, and there's no mention of a vimscript workaround. - Sep 21, 2012