我应该如何在Vim中重命名我当前的文件?
例如:
person.html_erb_spec.rbperson.haml_spec.rbperson.haml_spec.rb我怎么会优雅地这样做呢?
sou*_*rge 434
该命令被调用:saveas,但遗憾的是它不会删除您的旧文件,您必须手动执行此操作.了解:help saveas更多信息.
编辑:
大多数vim安装都有一个集成的文件浏览器,您可以将其用于此类操作.尝试:Explore命令模式(我实际上将它映射到一个功能键,它非常方便).例如,您可以使用R或重命名文件D.但是按下<F1>浏览器会给你一个更好的概述.
小智 149
如果您使用git并且已经拥有tpope的插件fugitive.vim,那么只需:
:Gmove newname
Run Code Online (Sandbox Code Playgroud)
这将:
如果您的文件尚未添加到git repo,请先添加它:
:Gwrite
Run Code Online (Sandbox Code Playgroud)
inn*_*naM 86
有一个小插件让你这样做.
wot*_*oto 73
我正在使用NERDTree插件:
:NERDTreeFind
Run Code Online (Sandbox Code Playgroud)
然后按 m
要重命名,您可以选择(m)ove the current node并更改文件名.还有删除,复制,移动等选项......
gim*_*mel 70
:w newname- 创建副本.:e#.:!rm oldname.在Windows上,可选的第3步稍有改动:
:!del oldname.Ben*_*min 33
如果文件已保存:
:!mv {file location} {new file location}
:e {new file location}
Run Code Online (Sandbox Code Playgroud)
例:
:!mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
:e src/test/scala/myNewFile.scala
Run Code Online (Sandbox Code Playgroud)
许可要求:
:!sudo mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
Run Code Online (Sandbox Code Playgroud)
另存为:
:!mv {file location} {save_as file location}
:w
:e {save_as file location}
Run Code Online (Sandbox Code Playgroud)
对于 未经验证的Windows
:!move {file location} {new file location}
:e {new file location}
Run Code Online (Sandbox Code Playgroud)
Mes*_*sco 30
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
Run Code Online (Sandbox Code Playgroud)
control+ R,在按下之前#会立即扩展到备用文件(当前窗口中先前编辑过的路径)Enter.这使我们可以审查我们将要删除的内容.使用管道|在这种情况下是不是安全的,因为如果sav由于某种原因失败,#仍将指向另一个地方(或没有).这意味着!rm #或delete(expand(#))可能删除完全不同的文件!所以要小心谨慎或使用好的脚本(这里提到了很多答案).
...或者尝试自己构建一个函数/命令/脚本.从简单的开始:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
Run Code Online (Sandbox Code Playgroud)
在vimrc重新加载后,只需输入:Rename new_filename.这个命令有什么问题?
安全测试1:什么:Rename没有说法?
是的,它会删除隐藏在'#'中的文件!
解决方案:您可以使用例如.条件或try声明:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
Run Code Online (Sandbox Code Playgroud)
安全测试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>)
Run Code Online (Sandbox Code Playgroud)
笔记
!rm #比!rm old_name- >你不需要记住旧名称
!rm <C-R>#比!rm #手工做的更好- >你会看到你真正删除的东西(安全原因)
!rm通常不是很安全...... mv到垃圾场更好
call delete(expand('#'))比shell命令(操作系统不可知)更好但输入更长,不可能使用control+R
try | code1 | code2 | tryend - >当code1发生错误时,不要运行code2
:sav(或:saveas)等同于:f new_name | w- 请参阅file_f - 并保留撤消历史记录
expand('%:p')给出你的位置的整个路径(%)或备用文件的位置(#)
Gav*_*our 29
我建议:Rename从tpope的太监这个.
它还包括一堆其他方便的命令.
Rename命令目前在其中定义如下(检查repo是否有任何更新!):
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
Run Code Online (Sandbox Code Playgroud)
Ben*_*Ben 28
你也可以用netrw来做
explore命令在打开文件的目录中打开netrw
:E
Run Code Online (Sandbox Code Playgroud)
将光标移动到要重命名的文件上:
R
Run Code Online (Sandbox Code Playgroud)
输入新名称,按enter键,然后按y.
Max*_*Kim 17
sav person.haml_spec.rb | call delete(expand('#'))
Run Code Online (Sandbox Code Playgroud)
Наг*_*мер 15
要在不使用插件的情况下重命名现有文件,您应该使用命令
:Explore
Run Code Online (Sandbox Code Playgroud)
此命令允许您浏览 .directory 中的文件,删除或重命名它们。比您应该导航到资源管理器中的必要文件而不是键入R命令,这将允许您重命名文件名
Jez*_*mas 10
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>
Run Code Online (Sandbox Code Playgroud)
怎么样(由杰克的建议改进):
:exe "!mv % newfilename" | e newfilename
Run Code Online (Sandbox Code Playgroud)
Vim确实有一个rename功能,但不幸的是它没有保留历史.
在不丢失历史记录的情况下,最简单的操作系统无关的方法是:
:saveas new_file_name
:call delete(expand('#:p'))
Run Code Online (Sandbox Code Playgroud)
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>)
Run Code Online (Sandbox Code Playgroud)
该命令Rename将帮助您快速重命名文件.
:!mv % %:h/new_name
Run Code Online (Sandbox Code Playgroud)
寄存器%包含当前文件的名称。'%:h'显示了目录“头部”含有当前文件,如:%:h回报/abc/def你的文件完整路径是abc/dev/my.txt