Vimで現在のファイルの名前を変更するにはどうすればよいですか?
例えば:
- 編集中です
person.html_erb_spec.rb
- 名前を変更してほしい
person.haml_spec.rb
- 編集を続けたい
person.haml_spec.rb
これをエレガントに行うにはどうすればよいですか?
git を使用していて、すでに tpope のプラグインfugitive.vimを持っている場合は、次のようにします。
:Gmove newname
この意志:
ファイルがまだ git リポジトリに追加されていない場合は、最初に追加します。
:Gwrite
私はNERDTreeプラグインでそれをやっています:
:NERDTreeFind
次に押すm
(m)ove the current node
名前を変更するには、ファイル名を選択して変更できます。また、削除、コピー、移動などのオプションもあります...
これを可能にする小さなプラグインがあります。
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control+Rを押すと、 を押す前に代替ファイル(現在のウィンドウで以前に編集したパス) に#即座に展開されます。これにより、正確に何を削除するかを確認できます。このような場合にパイプを使用することは安全ではありません。何らかの理由で失敗した場合でも、別の場所を指す (または何も指さない) からです。つまり、まったく別のファイルを削除するか、削除する可能性があります。したがって、手作業で慎重に行うか、適切なスクリプトを使用してください(ここの多くの回答で言及されています)。Enter|
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('#'))
シェル コマンド (OS に依存しない) よりも優れていますが、入力に時間がかかり、使用できませんcontrol+R
try | code1 | code2 | tryend
-> code1 でエラーが発生した場合、code2 を実行しない
:sav
(または:saveas
) - file_f:f new_name | w
を参照- と同等であり、元に戻す履歴を保存します
expand('%:p')
あなたの場所の完全なパス ( %
) または代替ファイルの場所 ( #
)を与える
ファイルがすでに保存されている場合:
:!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}
netrw を使用して行うこともできます
explore コマンドは、開いているファイルのディレクトリで netrw を開きます。
:E
名前を変更するファイルの上にカーソルを移動します。
R
新しい名前を入力し、Enter キーを押し、y キーを押します。
:Rename
これについては、tpopeの宦官からお勧めします。
また、その他の便利なコマンドも多数含まれています。
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
プラグインを使用せずに既存のファイルの名前を変更するには、コマンドを使用する必要があります
:Explore
このコマンドを使用すると、.directory 内のファイルを調べたり、削除したり、名前を変更したりできます。R
ファイル名の名前を変更できるようにするコマンドを入力するよりも、エクスプローラーで必要なファイルに移動する必要があります
sav person.haml_spec.rb | call delete(expand('#'))
:!mv % %:h/new_name
Register%
には、現在のファイルの名前が含まれています。'%:h'
現在のファイルを含むディレクトリ 'head' を表示します。例:ファイルのフル パスが次の場合に%:h
戻ります。/abc/def
abc/def/my.txt
Tim Pope によるvim-eunuchと呼ばれる見た目に大きなプラグインがあります。これには、名前の変更機能やその他の機能 (削除、検索、すべて保存、chmod、sudo 編集など) が含まれています。
vim-eunuch でファイルの名前を変更するには:
:Move filename.ext
rename.vim との比較:
:rename[!] filename.ext
いくつかのキーストロークを節約します:)
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
は、ファイルの名前をすばやく変更するのに役立ちます。
これはどうですか(ジェイクの提案により改善されました):
:exe "!mv % newfilename" | e newfilename
これが「最も簡単な」方法かどうかはわかりませんが、既にファイルを保存していると仮定すると (:w)、シェルを呼び出して (:sh)、単純な cp foo foo.bak を実行します。エディターに戻るにはCtrl-D/Exit を使用します。このリンクのviエディターコマンドの便利なリスト
:f の後に :w を使用することもできます
この小さなスクリプトは完璧ではありません (追加のキャリッジ リターンを押さなければなりません) が、仕事は完了です。
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 #
もう 1 つの方法は、vim のネイティブ部分である netrw を使用することです。
:e path/to/whatever/folder/
次に、削除、名前変更などのオプションがあります。
編集中のファイルのフォルダーに netrw を開くためのキーマップを次に示します。
map <leader>e :e <C-R>=expand("%:p:h") . '/'<CR><CR>