dot_files/vim-plugins/Rename.vim

65 lines
1.4 KiB
VimL
Raw Normal View History

2017-07-09 00:26:06 +03:00
" Rename.vim - Rename a buffer within Vim and on the disk
"
" Copyright June 2007-2011 by Christian J. Robinson <heptite@gmail.com>
"
" Distributed under the terms of the Vim license. See ":help license".
"
" Usage:
"
" :Rename[!] {newname}
command! -nargs=* -complete=file -bang Rename call Rename(<q-args>, '<bang>')
function! Rename(name, bang)
let l:name = a:name
let l:oldfile = expand('%:p')
if bufexists(fnamemodify(l:name, ':p'))
if (a:bang ==# '!')
silent exe bufnr(fnamemodify(l:name, ':p')) . 'bwipe!'
else
echohl ErrorMsg
echomsg 'A buffer with that name already exists (use ! to override).'
echohl None
return 0
endif
endif
let l:status = 1
let v:errmsg = ''
silent! exe 'saveas' . a:bang . ' ' . l:name
if v:errmsg =~# '^$\|^E329'
let l:lastbufnr = bufnr('$')
if expand('%:p') !=# l:oldfile && filewritable(expand('%:p'))
if fnamemodify(bufname(l:lastbufnr), ':p') ==# l:oldfile
silent exe l:lastbufnr . 'bwipe!'
else
echohl ErrorMsg
echomsg 'Could not wipe out the old buffer for some reason.'
echohl None
let l:status = 0
endif
if delete(l:oldfile) != 0
echohl ErrorMsg
echomsg 'Could not delete the old file: ' . l:oldfile
echohl None
let l:status = 0
endif
else
echohl ErrorMsg
echomsg 'Rename failed for some reason.'
echohl None
let l:status = 0
endif
else
echoerr v:errmsg
let l:status = 0
endif
return l:status
endfunction