23

有没有办法在 Vim 中移动文件?例如,我在 Vim 中打开了一个文件 foo/bar.txt。我知道移动此文件的两种方法:

第一个解决方案:

  1. 删除缓冲区:bd bar.txt
  2. 在外壳上执行移动mv foo/bar.txt foo/bar2.txt
  3. 在 vim 中加载文件:e foo/bar2.txt

第二种解决方案:

  1. 关闭 Vim,所以所有缓冲区都关闭了。
  2. 在外壳上执行移动...
  3. 启动 Vim 并加载文件。

但这两种解决方案都很尴尬。我知道,有一个用于重命名文件vim-enuch的插件,但是没有一种 Vim 方法可以执行这种基本功能吗?

4

3 回答 3

43

您还可以使用 netrw(默认文件资源管理器)重命名功能。

  1. 打开netrw:E
  2. 将光标移动到要重命名的文件所在的行,在本例中为 bar.txt 。/您使用 h,j,k,l 移动到有问题的文件,或者您可以使用(eg /bar.txt)搜索它
  3. R。然后将提示您输入新的文件路径。完成输入文件路径后<CR>
  4. 将光标移动到新文件并使用<CR>

虽然此解决方案可能不如使用 vim-eunch 快,但它确实允许您在重命名文件时查看项目的结构。这也将允许您一次移动多个文件。

进一步阅读运行:help netrw-move

于 2012-11-21T17:32:07.020 回答
8

没有像这样移动文件的原子方式,但这应该很接近:

function! MoveFile(newspec)
     let old = expand('%')
     " could be improved:
     if (old == a:newspec)
         return 0
     endif
     exe 'sav' fnameescape(a:newspec)
     call delete(old)
endfunction

command! -nargs=1 -complete=file -bar MoveFile call MoveFile('<args>')

现在你可以说:

:MoveFile file2.txt

重命名为 file2.txt

:MoveFile %.0

将 file2.txt 移动到 file2.txt.0

于 2012-06-04T16:17:59.417 回答
5

如果您在 bar.txt 缓冲区中:

:w bar2.txt
:!rm bar.txt

如果bar2.txt已存在于当前目录中,请使用:w!.

于 2012-06-04T16:23:13.563 回答