如何重命名正在编辑的文件?


Answers:


34

您可以使用将文件保存为其他名称:w。但是此操作不会删除旧文件,并且“旧”文件保留在缓冲区中,因此所有更改都将应用于“旧”文件。

:saveas保存新文件并在新缓冲区中打开它。但是它不会删除旧文件。

我将tpope / vim-eneuch用于:Move文件。

:Move:同时重命名缓冲区和磁盘上的文件。


:w或的一个缺点:saveas是,如果您正在编辑脚本,它将失去执行权限。netrw重命名将保留权限。
wisbucky

10

您可以放到Netrw并在那里重命名文件。

如果您要编辑的文件位于当前目录中,请执行以下操作:

:edit .

导航到文件,按R,然后更改名称。按下Enter以编辑文件。

需要注意的是:原始缓冲区仍保留在缓冲区列表中。如果切换到它,则为空。

如果您要编辑的文件位于其他目录中,则可以使用以下命令更改为文件目录:

:cd %:p:h

如果您不想更改整个Vim会话的目录,而只想更改当前缓冲区的目录,则可以改为:

:lcd %:p:h

2
直接输入:edit %:p:h似乎也可以。
MladenJablanović16年

:E还将打开netrw
wisbucky

6

我多年来一直在使用Rename2插件。它重命名当前缓冲区和磁盘上的文件:

:Rename {newname}

编辑:我.vimrcgithub上找到了这个文件:

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>

3

最好的方法是使用:Move,如OrangTux所说。为了完整起见,您还可以!在命令模式下使用bang()在vi编辑器中执行终端命令。

:!mv {current_file} {new_name}
:e {new_name}

但是,此方法不会从缓冲区列表中删除旧缓冲区。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.