64 lines
1.4 KiB
VimL
64 lines
1.4 KiB
VimL
" 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
|