Vim сохраняет положение окна при переключении буферов
Проблема, с которой я столкнулась с Vim в общем, заключается в том, что когда я переключаю буферы в окне (либо :[n]b
или MiniBufExpl), позиция курсора остается прежней, но окно всегда позиционирует себя так, что строка курсора на находится посередине.
Это действительно раздражает меня, так как я визуально помню, где находятся верхние/нижние части окна, а не там, где они должны были бы располагаться курсором в середине окна.
Можно ли изменить параметр, чтобы сохранить положение окна над буфером?
Ответы
Ответ 1
Интересно отметить, что это меня не беспокоило, пока я не прочитал ваш вопрос, lol.
Попробуйте следующее:
if v:version >= 700
au BufLeave * let b:winview = winsaveview()
au BufEnter * if(exists('b:winview')) | call winrestview(b:winview) | endif
endif
Ответ 2
То, что script, отправленное @dnets, всегда устанавливает курсор в верхней части экрана для меня, хотя и в том же месте в файле.
Я изменил его на это (скопировано из 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
И теперь он работает так, как я хочу, экран и позиция курсора сохранены.