Vim:如何刷新缓冲区以指向新的文件路径

5

我想知道是否有可能在我修改一个已经打开的缓冲区时,将其刷新到指向新路径。

示例:

  1. 在 vim 中打开 ./dest1/foo
  2. foo 移动到 ./dest2/foo
  3. 更新打开的缓冲区,使其反映新路径 ./dest2/foo 而不是读/写旧路径
2个回答

3

是的,这是可能的,但不会没有一点点的干扰。

  1. 在vim中打开./dest1/foo文件
  2. 通过按下“:”进入vim命令模式
  3. 在提示符处输入以下命令——!mv '%:p' "./dest2/foo"

现在你可能会得到一个消息,“File "foo" is no longer available. Press ENTER or type command to continue”. 按下ENTER键。Vim 现在从新位置重新打开了该文件。


这个解决方案忽略了 OP 问题的第三点。如果您键入 :pwd,路径仍将是旧文件的路径,但应该更新。 - builder-7000

2
下面的函数可以满足你的需求:
function Saveas(newfile)                                                 
    let oldfile=expand("%:p")                                            
    silent! exe 'saveas!' fnameescape(a:newfile)                         
    bd #                                                                 
    exe 'cd ' . expand('%:h')                                            
    call delete(oldfile)                                                 
endfunction                                                              
command! -nargs=1 -complete=dir -complete=file Saveas call Saveas('<args>')

如何使用它:如果当前正在编辑./foo,则可以执行:Saveas ./dest1/foo(假设dest1目录存在)。现在,当前缓冲区将是./dest/foo,而foo将从缓冲列表中删除。此外,当前目录(pwd)将更新为./dest
注意:文件foo将被删除。一个含有foo内容的新文件./dest1/foo将被创建。

3
Tim Pope的eunuch.vim提供类似的命令,:Move:Rename - Peter Rincker
1
这很有用,但我实际上想知道是否有一种方法可以在移动文件时更新文件路径(比如我有一个打开的 shell 并且正在重新排列项目中的一些文件)。 - Scorpio750

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接