現在のファイルの名前を変更するにはどうすればいいですか?
例えば:
person.html_erb_spec.rb
を編集していますperson.haml_spec.rb
に改名してほしいperson.haml_spec.rb
の編集を続けたいどうやってこれを上品にやろうか。
小さなプラグイン があります。
このコマンドは:saveas
と呼ばれますが、残念ながら古いファイルは削除されません。手動で削除する必要があります。詳しくは :help saveas
をご覧ください。
編集:
ほとんどのVimインストールには統合ファイルエクスプローラがあり、これを使ってそのような操作をすることができます。コマンドモードで:Explore
を試してください(私は実際にそれをファンクションキーにマッピングします。それはとても便利です)。たとえば、ファイルの名前をR
で変更したり、D
で削除したりできます。しかし、エクスプローラで<F1>
を押すとより良い概観が得られます。
Gitを使っていて、すでにtpopeのプラグイン fugitive.vim を持っているのなら、単に
:Gmove newname
この意志:
あなたのファイルがまだGitリポジトリに追加されていない場合は、まずそれを追加します。
:Gwrite
:w newname
- コピーを作成する。:e#
の編集を始めます。:!rm oldname
)を削除します。Windowsでは、オプションの3番目のステップが少し変わります。
:!del oldname
を削除します。私はNERDTreeプラグインでそれをやっています:
:NERDTreeFind
次に押す m
名前を変更するには、(m)ove the current node
を選択してファイル名を変更します。削除、コピー、移動などのオプションもあります。
ファイルが既に保存されている場合
:!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}
私はtpopeの eunuch から:Rename
を勧めます。
その他の便利なコマンドもたくさん含まれています。
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
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control + R、 # を押す前に即座に 代替ファイル (現在のウィンドウで編集されたパス)に展開されます Enter。これにより、削除しようとしている内容を確認できます。このような場合にパイプ|
を使用するのはnot secureです。なぜならsav
が何らかの理由で失敗した場合でも、#
は別の場所を指す(または何もしない)からです。つまり、!rm #
またはdelete(expand(#))
はまったく別のファイルを削除する可能性があります。そのため慎重にそれを行うか、または良いスクリプトを使用してください(それらはここで多くの答えで言及されています)。
...または自分で関数/コマンド/スクリプトを作成してみてください。次のように単純なsthから始めます。
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
- > code1の途中でエラーが発生したとき、code2を実行しない
:sav
(または:saveas
)は:f new_name | w
と同等です - file_f を参照 - および元に戻す履歴を保存します
expand('%:p')
はあなたの場所(%
)または代替ファイルの場所(#
)のフルパスを与えます
Netrwを使ってもできます
Exploreコマンドは、開いているファイルのディレクトリにあるnetrwを開きます。
:E
名前を変更したいファイルの上にカーソルを移動します。
R
新しい名前を入力してEnterキーを押し、yキーを押します。
sav person.haml_spec.rb | call delete(expand('#'))
これを処理する関数が 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>
これはどうですか(Jakeの提案によって改善されました):
: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
数回のキーストロークを節約できます。
:fに続けて:wを使用することもできます。
これが「最も簡単な」方法かどうかはわかりませんが、ファイル(:w)が既に保存されていると仮定して、シェル(:sh)を起動して単純なcp 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>
:sav newfile | !rm #
バッファリストから古いファイルを削除しないことに注意してください。それがあなたにとって重要であるならば、あなたは代わりに以下を使うことができます:
:sav newfile | bd# | !rm #
もう一つの方法はnetrwを使うことです。これはvimの本来の部分です。
:e path/to/whatever/folder/
その後、削除、名前変更などのオプションがあります。
これは、編集中のファイルのフォルダへのnetrwを開くためのキーマップです。
map <leader>e :e <C-R>=expand("%:p:h") . '/'<CR><CR>