是否可以在Vim中重命名我正在编辑的文件?目前,我要做的是退出Vim,重命名该文件,然后再次从Vim中打开。

评论

相关:stackoverflow.com/questions/1205286/…

我有兴趣在neovim中做到这一点

@ MigueldeVal-Borro只需使用vim-eunuch。它也适用于Neovim。

#1 楼

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

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

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


:移动:重命名缓冲区和文件同时在磁盘上。


评论


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

– Wisbucky
19年9月12日在23:01

是:Move实质上与:!mv {src} {dest}相同,然后运行:e {src},其中{src}是旧缓冲区的名称,因此将销毁,因为您将看到`E211:File {src}不再可用,{dest}在哪里是新缓冲区的名称?

–尼古拉斯·库萨尔(Nicholas Cousar)
20年8月29日在16:38



#2 楼

您可以放到Netrw并在其中重命名文件。

如果要编辑的文件在当前目录中,请执行以下操作: />导航到文件,按R键,然后更改名称。
按Enter键编辑文件。 br />如果切换到该文件,则该文件为空。
:edit .


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

:cd %:p:h


评论


直接输入:edit%:p:h似乎也可以。

–MladenJablanović
16年2月11日在8:13

:E也会打开netrw

– Wisbucky
19年9月12日在22:52

我使用:ex 扩展为:Explore。

–罗伯特
20年7月10日在16:21

#3 楼

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

:Rename {newname}


编辑:我在github上找到了一个.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>


评论


如果使用此代码段的用户需要使用旧文件删除缓冲区,则可以添加exec':bd'。静音!rm…行后的old_file

–德米特里·科罗里奥夫(Dmitry Koroliov)
20年7月6日,0:19

#4 楼

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

#5 楼

您可以只从vim中执行shell命令。有点脏,因为旧缓冲区仍然存在,但是使用NerdTree插件对我来说已经足够了:
!mv <current path> <new path>


评论


欢迎来到Vi和Vim!

– D. Ben Knoble♦
20 Sep 9 '13 at:40

#6 楼

在Vim中重命名文件的一种简单方法是:Explore命令。导航到要重命名的文件,而不是重命名文件。