我应该如何重命名我的当前文件在Vim?

例如:

我正在编辑person.html_erb_spec.rb 我希望它重命名为person.haml_spec.rb 我想继续编辑person.haml_spec.rb

我该如何优雅地做这件事呢?


当前回答

我建议:从tpope的eunuch(太监)来命名这个。

它还包括一系列其他方便的命令。

Rename命令目前定义如下(检查repo是否有更新!):

command! -bar -nargs=1 -bang -complete=file Rename :
  \ let s:file = expand('%:p') |
  \ setlocal modified |
  \ keepalt saveas<bang> <args> |
  \ if s:file !=# expand('%:p') |
  \   call delete(s:file) |
  \ endif |
  \ unlet s:file

其他回答

在Gary Bernhardt的.vimrc中有一个函数处理这个问题。

function! RenameFile()
let old_name = expand('%')
let new_name = input('New file name: ', expand('%'), 'file')
if new_name != '' && new_name != old_name
    exec ':saveas ' . new_name
    exec ':silent !rm ' . old_name
    redraw!
endif
endfunction
map <leader>n :call RenameFile()<cr>

Tim Pope设计了一个更大的插件vim-eunuch,它包含了重命名函数和其他一些功能(删除、查找、保存所有、chmod、sudo编辑等等)。

使用vim-eunuch重命名文件。

:请确保移动

相对于rename.vim:

:重命名!)请

节省了一些按键:)

该命令被称为:saveas,但不幸的是,它不会删除您的旧文件,您必须手动执行。参见:help save获取更多信息。

编辑:

大多数vim安装都有一个集成的文件资源管理器,您可以使用它进行此类操作。尝试:在命令模式下探索(我会将其映射到一个功能键,这非常方便)。例如,可以用R重命名文件,也可以用D删除文件。但是在资源管理器中按<F1>会给你一个更好的概述。

另一种方法是只使用netrw,它是vim的原生部分。

:e path/to/whatever/folder/

然后还有删除、重命名等选项。

下面是打开netrw到你正在编辑的文件文件夹的键图:

map <leader>e :e <C-R>=expand("%:p:h") . '/'<CR><CR>

我建议:从tpope的eunuch(太监)来命名这个。

它还包括一系列其他方便的命令。

Rename命令目前定义如下(检查repo是否有更新!):

command! -bar -nargs=1 -bang -complete=file Rename :
  \ let s:file = expand('%:p') |
  \ setlocal modified |
  \ keepalt saveas<bang> <args> |
  \ if s:file !=# expand('%:p') |
  \   call delete(s:file) |
  \ endif |
  \ unlet s:file