Vim сохраняет положение окна при переключении буферов - PullRequest
20 голосов
/ 23 ноября 2010

Проблема, с которой я столкнулся при работе с Vim в целом, заключается в том, что когда я переключаю буферы в окне (либо :[n]b, либо MiniBufExpl), позиция курсора остается прежней, но окно всегда позиционирует себя так, чтобы навести курсорнаходится в середине.

Это действительно раздражает меня, так как я визуально помню, где находятся верхняя / нижняя части окна, а не где они были бы, если бы курсор был расположен в середине окна.

Есть ли настройка, которую я могу изменить, чтобы сохранить положение окна над буфером?

Ответы [ 2 ]

33 голосов
/ 23 ноября 2010

Интересно отметить, что меня это не беспокоило, пока я не прочитал твой вопрос, смеется.

Попробуйте это:

if v:version >= 700
  au BufLeave * let b:winview = winsaveview()
  au BufEnter * if(exists('b:winview')) | call winrestview(b:winview) | endif
endif
4 голосов
/ 23 июля 2015

Этот скрипт, публикуемый @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

И теперь оно работает так, как я хочу, экран и положение курсора сохранены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...