2010-11-23 3 views
18

Vim에서 일반적으로 가지고있는 문제는 윈도우에서 버퍼를 바꿀 때 (:[n]b 또는 MiniBufExpl 중 하나 일 때) 커서 위치는 그대로 유지되지만 윈도우는 항상 커서가있는 행이 중간에 있습니다.Vim은 버퍼를 바꿀 때 윈도우 위치를 유지합니다.

커서가 창 중간에 위치해야하는 곳이 아닌 창 상단/하단이 어디에 있는지 시각적으로 기억하기 때문에 정말 짜증이납니다.

버퍼를 통해 창 위치를 유지하기 위해 변경할 수있는 설정이 있습니까?

답변

31

귀하의 질문을 읽어주기 전까지는 문제가되지 않았습니다.

이 시도 :

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

나도 귀찮게하지 않았다. 그러나이 맵핑을 사용 했었습니다 :'nmap : bn '' ' – tungd

+0

좋은 작업, @poisonedbit, VIM 용 프로그래밍 매뉴얼을 추천 해 주시겠습니까? – Art

+1

@Art Vim에서'h usr_41.txt'을 시도하십시오; Steve Losh의 [Vimscript 어려운 길을 배우십시오] (http://learnvimscriptthehardway.stevelosh.com/). – echristopherson

3

@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 

로 변경 그리고 지금은 화면의 커서 위치 저장, 원하는대로 작동합니다.

관련 문제