mirror of
https://github.com/amix/vimrc
synced 2024-12-29 21:33:06 +00:00
80 lines
2.2 KiB
VimL
80 lines
2.2 KiB
VimL
" ============================================================================
|
|
" File: vim-lastplace.vim
|
|
" Description: Reopen files where you left off. Configurable.
|
|
" Author: Gregory L. Dietsche <vim@gregd.org>
|
|
" Licence: MIT
|
|
" Website: https://www.gregd.org/
|
|
" Version: 3.1.1
|
|
" ============================================================================
|
|
|
|
if exists("b:loaded_lastplace_plugin") || &cp
|
|
finish
|
|
endif
|
|
let b:loaded_lastplace_plugin = 1
|
|
|
|
scriptencoding utf-8
|
|
|
|
if !exists('g:lastplace_ignore')
|
|
let g:lastplace_ignore = "gitcommit,gitrebase,svn,hgcommit"
|
|
endif
|
|
|
|
if !exists('g:lastplace_open_folds')
|
|
let g:lastplace_open_folds = 1
|
|
endif
|
|
|
|
if !exists('g:lastplace_ignore_buftype')
|
|
let g:lastplace_ignore_buftype = "quickfix,nofile,help"
|
|
endif
|
|
|
|
fu! s:lastplace()
|
|
if index(split(g:lastplace_ignore_buftype, ","), &buftype) != -1
|
|
return
|
|
endif
|
|
|
|
if index(split(g:lastplace_ignore, ","), &filetype) != -1
|
|
return
|
|
endif
|
|
|
|
try
|
|
"if the file does not exist on disk (a new, unsaved file) then do nothing
|
|
if empty(glob(@%))
|
|
return
|
|
endif
|
|
catch
|
|
return
|
|
endtry
|
|
|
|
if line("'\"") > 0 && line("'\"") <= line("$")
|
|
"if the last edit position is set and is less than the
|
|
"number of lines in this buffer.
|
|
|
|
if line("w$") == line("$")
|
|
"if the last line in the current buffer is
|
|
"also the last line visible in this window
|
|
execute "normal! g`\""
|
|
|
|
elseif line("$") - line("'\"") > ((line("w$") - line("w0")) / 2) - 1
|
|
"if we're not at the bottom of the file, center the
|
|
"cursor on the screen after we make the jump
|
|
execute "normal! g`\"zz"
|
|
|
|
else
|
|
"otherwise, show as much context as we can by jumping
|
|
"to the end of the file and then to the mark. If we
|
|
"pressed zz here, there would be blank lines at the
|
|
"bottom of the screen. We intentionally leave the
|
|
"last line blank by pressing <c-e> so the user has a
|
|
"clue that they are near the end of the file.
|
|
execute "normal! \G'\"\<c-e>"
|
|
endif
|
|
endif
|
|
if foldclosed(".") != -1 && g:lastplace_open_folds
|
|
"if we're in a fold, make the current line visible and recenter screen
|
|
execute "normal! zvzz"
|
|
endif
|
|
endf
|
|
|
|
augroup lastplace_plugin
|
|
autocmd!
|
|
autocmd BufWinEnter * call s:lastplace()
|
|
augroup END
|