在Vim中移动文件

时间:2012-06-04 16:14:48

标签: vim

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

第一个解决方案:

  1. 使用:bd bar.txt
  2. 删除缓冲区
  3. 使用mv foo/bar.txt foo/bar2.txt
  4. 在shell上执行移动
  5. 使用:e foo/bar2.txt
  6. 在vim中加载文件

    第二个解决方案:

    1. 关闭Vim,使所有缓冲区都关闭。
    2. 在shell上执行移动......
    3. 启动Vim并加载文件。
    4. 但这两种解决方案令人尴尬。我知道,有一个用于重命名文件vim-enuch的插件,但是没有用于执行此类基本功能的Vim方法吗?

3 个答案:

答案 0 :(得分:27)

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

  1. 使用:E
  2. 打开netrw
  3. 将光标移动到包含要重命名的文件的行,在本例中为bar.txt。您可以使用h,j,k,l移至相关文件,也可以使用/进行搜索(例如/bar.txt
  4. 点击R。然后,系统将提示您输入新的文件路径。完成输入文件路径后,点击<CR>
  5. 将光标移动到新文件并使用<CR>
  6. 打开它

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

    进一步阅读:help netrw-move

答案 1 :(得分:6)

没有原子方法来移动这样的文件,但这应该是关闭的:

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

答案 2 :(得分:4)

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

:w bar2.txt
:!rm bar.txt

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