miyazi888の覚え書き日記

学習したことを書き留めてます。

vimで現在開いてるファイルのファイル名を変更する

プログラム書いてて、今編集中のファイルの名前を変更したい時、これまでは

  • ctrl+zでvimを一旦停止して該当のディレクトリまで移動、mvコマンドでファイル名を変更後、fgでvimに復帰
  • :terminalでターミナル開いて、該当ディレクトリまで移動後、mvコマンドでファイル名を変更

とかやってたんですが、ディレクトリ移動がかったるいので、最近は.vimrcあるいはinit.vimに以下のvim scriptを書くようにしました。

" ---------------
" rename file script
" ---------------
function! RenameFile(...)
  let old_name = expand('%')

  if a:0 >= 1
    let default_name = expand("%:h") . '/' . a:1
  else
    let default_name = expand('%')
  endif
  let new_name = input('New current file name: ', default_name)
  if filereadable(new_name)
    redraw!
    echo "Can't rename : Already exists new filename."
    return
  end

  if new_name != '' && new_name != old_name
    exec ':f ' . new_name . '|call delete(expand("#"))'
    exec ':saveas ' . new_name
    redraw!
  endif
endfunction
command! -nargs=? Rename call RenameFile(<f-args>)

これで:Renameと打ち込むと新しいファイル名を聞かれるので、打ち込めばファイル名が変わります。

vimは不満があれば、自分好みに変更できるのが、やっぱいいですよね。