Answers:
有一个小插件,让您执行此操作。
Program Files (x86)
。任何时候需要使用此目录时,都需要用引号引起来。恩,很多。
该命令称为:saveas
,但是很遗憾,它不会删除您的旧文件,您必须手动执行此操作。查看:help saveas
更多信息。
编辑:
大多数vim安装都有集成的文件浏览器,您可以将其用于此类操作。:Explore
在命令模式下尝试(我实际上会将其映射到功能键,这非常方便)。例如,您可以使用来重命名文件R
或使用来删除文件D
。但是按<F1>
一下浏览器将为您提供更好的概述。
如果您使用git并且已经拥有tpope的插件fugitive.vim,则只需:
:Gmove newname
这将:
如果您的文件尚未添加到git repo,请先添加它:
:Gwrite
:Gmove
需要新文件名的相对路径。一个不错的方法是键入:Gmove <ctrl-r>%
附加当前路径/文件名的类型。
我正在使用NERDTree插件:
:NERDTreeFind
然后按 m
要重命名,您可以选择(m)ove the current node
并更改文件名。也有删除,复制,移动等选项。
:w newname
--创建副本。:e#
。:!rm oldname
。在Windows上,可选的第3步会有所变化:
:!del oldname
。:f newname
2)保存它:w
3)(可选)!rm oldname
。好处是可以保留您的撤消历史记录。
:saveas
在这方面更好,@ rampion-并执行@kynan编写的内容。
如果文件已经保存:
:!mv {file location} {new file location}
:e {new file location}
例:
:!mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
:e src/test/scala/myNewFile.scala
权限要求:
:!sudo mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
另存为:
:!mv {file location} {save_as file location}
:w
:e {save_as file location}
对于未 验证的Windows
:!move {file location} {new file location}
:e {new file location}
我会:Rename
从tpope的太监那里推荐这个。
它还包括许多其他方便的命令。
当前,重命名命令的定义如下(请检查存储库中是否有任何更新!):
command! -bar -nargs=1 -bang -complete=file Rename :
\ let s:file = expand('%:p') |
\ setlocal modified |
\ keepalt saveas<bang> <args> |
\ if s:file !=# expand('%:p') |
\ call delete(s:file) |
\ endif |
\ unlet s:file
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control+ R,#将立即膨胀到备用文件按压之前(在当前窗口以前编辑过的路径)Enter。这使我们可以查看将要删除的内容。使用管道|
在这种情况下是不是安全的,因为如果sav
由于某种原因失败,#
仍将指向另一个地方(或没有)。这意味着!rm #
或delete(expand(#))
可能会删除完全不同的文件!因此,请谨慎地手动执行或使用良好的脚本(此处在许多答案中都提到了这些脚本)。
...或尝试自己构建函数/命令/脚本。从以下简单开始:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
重新加载vimrc之后,只需键入:Rename new_filename
。此命令有什么问题?
安全测试1:什么:Rename
没有说法?
是的,它删除隐藏在“#”中的文件!
解决方案:您可以使用例如。这样的条件或try
陈述:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
安全测试1 :(
:Rename
不带参数)将引发错误:
E471:需要参数
安全测试2: 如果名称与前一个相同怎么办?
安全测试3: 如果文件将位于与实际位置不同的位置怎么办?
自己修复。为了提高可读性,您可以按以下方式编写:
function! s:localscript_name(name):
try
execute 'saveas ' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
笔记
!rm #
比!rm old_name
-> 更好-您不需要记住旧名称
!rm <C-R>#
比!rm #
手动操作要好->您会看到实际删除的内容(出于安全原因)
!rm
通常不太安全... mv
到垃圾桶的位置更好
call delete(expand('#'))
比shell命令(与OS无关)要好,但键入时间更长且无法使用control+R
try | code1 | code2 | tryend
->当代码1发生错误时,请勿运行代码2
:sav
(或:saveas
)等效于:f new_name | w
-参见file_f-并保留撤消历史记录
expand('%:p')
给出您位置的完整路径(%
)或备用文件的位置(#
)
Gary Bernhardt的.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>
怎么样(由杰克的建议改进):
:exe "!mv % newfilename" | e newfilename
:exe "!mv % newfilename" | e newfilename
Vim确实具有rename
功能,但是不幸的是它没有保留历史记录。
重命名文件而不丢失历史记录的最简单的操作系统不可知方式是:
:saveas new_file_name
:call delete(expand('#:p'))
expand('#:p')
返回旧文件的完整路径。
使用:bd #
,如果你也想删除暂存列表中的旧文件。
如果要使用快速命令来重命名文件,请在〜/ .vim / plugin下添加一个新文件,其内容如下:
function! s:rename_file(new_file_path)
execute 'saveas ' . a:new_file_path
call delete(expand('#:p'))
bd #
endfunction
command! -nargs=1 -complete=file Rename call <SID>rename_file(<f-args>)
该命令Rename
将帮助您快速重命名文件。
提姆·波普(Tim Pope)有一个看似更大的插件vim-eunuch,其中包括重命名功能以及其他一些功能(删除,查找,保存所有内容,chmod,sudo编辑等)。
要在vim-eunuch中重命名文件:
:Move filename.ext
与rename.vim相比:
:rename[!] filename.ext
节省了一些击键:)
要在不使用插件的情况下重命名现有文件,应使用命令
:Explore
此命令允许您浏览.directory中的文件,删除或重命名它们。比您应该在资源管理器中导航到必要的文件,而不是type R
命令,它将允许您重命名文件名
我不知道这是否是“最简单”的方法,但是假设您已经保存了文件(:w),我将调用外壳程序(:sh)并执行一个简单的cp foo foo foo.bak返回编辑器使用Ctrl-D / Exit。此链接上的vi编辑器命令的有用列表
这个小脚本并不完美(您必须按下额外的回车键),但它可以完成工作。
function Rename()
let new_file_name = input('New filename: ')
let full_path_current_file = expand("%:p")
let new_full_path = expand("%:p:h")."/".new_file_name
bd
execute "!mv ".full_path_current_file." ".new_full_path
execute "e ".new_full_path
endfunction
command! Rename :call Rename()
nmap RN :Rename<CR>