回答:
これを可能にする小さなプラグインがあります。
Program Files (x86)
。このディレクトリを処理する必要があるときはいつでも、引用符で囲む必要があります。ええと、たくさんあります。
コマンドはと呼ばれ:saveas
ますが、残念ながら古いファイルは削除されません。手動で削除する必要があります。詳細については:help saveas
、を参照してください。
編集:
ほとんどのvimインストールには統合ファイルエクスプローラーがあり、このような操作に使用できます。:Explore
コマンドモードで試してみてください(実際には、これをファンクションキーにマップします。非常に便利です)。たとえば、でファイル名を変更しR
たり、ファイルを削除したりできますD
。ただし<F1>
、エクスプローラーを押すと、概要がわかりやすくなります。
gitを使用していて、tpopeのプラグインfugitive.vimがすでにある場合は、単純に次のようにします。
:Gmove newname
この意志:
ファイルがまだGitリポジトリに追加されていない場合は、最初に追加します。
: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のeunuchがお勧めです。
その他の便利なコマンドも多数含まれています。
Renameコマンドは現在、次のように定義されています(更新についてはリポジトリを確認してください)。
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
netrwを使用してそれを行うこともできます
exploreコマンドは、開いているファイルのディレクトリにnetrwを開きます
:E
名前を変更するファイルにカーソルを移動します。
R
新しい名前を入力し、Enterキーを押し、Yキーを押します。
: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('#'))
シェルコマンド(OSに依存しない)よりも優れていますが、入力に時間がかかり、使用できませんcontrol+R
try | code1 | code2 | tryend
-> code1の実行中にエラーが発生した場合、code2を実行しない
:sav
(または:saveas
)は-file_fを:f new_name | w
参照-と同等であり、取り消し履歴を保持します
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
機能がありますが、残念ながら履歴は保持されません。
履歴を失わずにファイル名を変更する最も簡単なOSに依存しない方法は次のとおりです。
: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内のファイルを探索し、それらを削除または名前変更できます。エクスプローラーで必要なファイルに移動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>