vimで現在のファイルを削除するにはどうすればよいですか?


回答:


102

rm(1)などの外部ツールを使用することは問題ありませんが、Vimにはdelete()ファイルを削除するための独自の機能もあります。これには、ポータブルであるという利点があります。

:call delete(expand('%'))

これを表現する別の方法:call delete(@%)は、%(現在のファイル)レジスタ(@accoladeによるヒント)を使用することです。

ディスク上のファイル表現とVimバッファーの両方で、現在のバッファーを完全にパージするには、次を追加します:bdelete

:call delete(expand('%')) | bdelete!

好みに応じてこれをマッピングすることをお勧めします。


7
ありがとう!.vimrcの次のマップは機能しているようです:nnoremap rm :call delete(expand('%')) \| bdelete!<CR>。あなたはあなたの答えを追加したいかもしれません。
fotanus 2013年

13
そのマッピングは理想的ではありません。rコマンドを壊したくない!マッピングの前に<Leader>...。を付けることをお勧めします。
glts 2013年

2
を使用してCtrl + Delにマップしましnnoremap <C-Del> :call delete(expand('%'))<CR>たが、誤って発生した場合に備えてバッファーを閉じません。それでもあなたはそれを保存するチャンスがあります。
Evgeni Sergeev 2014年

3
:call delete(@%)|q!←短いバリアント(マップしたくない場合)。(バッファはそのまま残り、この方法:lsで復活させることができます:b。ファイル名とバッファオプションは保持されますが、ファイルの内容は保持されません。)
Aaron Thoma 2015年

2
@accolade、私はあなたのトリックが好きです、しかしあなたは復活するため:call delete(@%)|bd!に使用:ls!:bて使用する必要があるでしょう。
Bart Louwers 2016

88

Vimコマンドでファイルを削除するを見てください。コメントセクションでは、あなたが探しているものを持っている必要があります。

基本的に、Rmは現在のファイルを削除します。RMは現在のファイルを削除し、バッファを(保存せずに)一度に終了します。

または、シェルコマンドを発行して、現在のファイルを削除することもできます。

:!rm %

1
これはとても単純なことなので、このためのスクリプトを作成する必要があるとはほとんど信じられません。ありがとう。
fotanus 2013年

3
で削除すると!rm %、vimがバッファに戻ったときの警告を回避する方法はありますか?
fotanus 2013年

1
ファイル名に特殊文字が含まれていると、このコマンドは機能しません。たとえば、ファイル名が20130711-contacts#285.vcfで、スペースがある場合、「rm:削除できません」「20130711-contacts」:そのようなファイルはありません。ディレクトリ '
Saeed

4
@ saeed144、ファイル名内のスペース(またはシェルレベルで解釈したくない他の文字)の場合は、ファイル名(%)を引用符で囲む必要があります!rm "%"
David Cain

8
データハザード警告!ただで%(ファイルパス(「ファイル名元々 、潜在的に相対的な、例えば、単にファイルの名前を呼び出したとしてvimの用語では」))の代わりに、%:p(絶対ファイルパス)を使用すると、代わりに別のディレクトリに同じ名前のファイルを削除するリスクの小さなを実行し、あなたが:cdそこで編集したことを忘れた場合。したがって、とにかくマップする場合では%:pなく、を使用することを強くお勧めし%ます。
アーロントーマ2016

25

プラグインは、単純な問題でも魅力的なソリューションになる場合があります。この場合、全能のティム・ポープによるeunuch.vimがあるので、私たちは幸運です。

それ自身の言葉でeunuch.vimは提供します

それを最も必要とするUNIXシェルコマンド用のVimシュガー。バッファと基になるファイルを同時に削除または名前変更します。findまたはをlocateクイックフィックスリストにロードします。等々。

完璧です。必要なものに加えて、UNIXシステムを使用している場合はいくつかの追加ツールがあります。

あなたが探しているコマンドは

:Remove!

繰り返しますが、必要に応じて再マップします:nnoremap <Leader>rm :Remove!<CR>


プラグインなしでやる方法を探していたので、他の答えを受け入れます。プラグインはよさそうだ:
fotanus 2013年

このプラグインはかなり便利であるあなたがvimの方法が必要な場合はmvmkdirfind、などを非常にお勧めします。
Ehtesh Choudhury 2016

5

私はvim内からファイルを削除できるのが好きですが、何らかの理由でまだバージョン管理されていない重要な作業を誤って削除することについても妄想しています。@gltsと@accoladeからの以前の情報を、使用方法に関するこの回答と組み合わせると便利だと思います。confirmコマンドをvimを終了する前にプロンプ​​ト。

これらをまとめて、~/.vimrcファイルを削除してバッファーを閉じる前にプロンプ​​トを表示する関数をに追加し、それをキーの組み合わせにマップしました。

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()

fun! DeleteFileAndCloseBuffer()
  let choice = confirm("Delete file and close buffer?", "&Do it!\n&Nonono", 1)
  if choice == 1 | call delete(expand('%:p')) | q! | endif
endfun

あなたが私よりも1つのキーストロークの妄想が少ない場合は<CR>、最初の行に追加できます

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>

リターンキーを1回押すだけです。


1
とにかくスクリプトを作成するときではexpand('%:p')なく、を使用することを強くお勧めし@%ます。(あなたが私のヒントを取り入れてくれてうれしいですが:)簡潔さの利点はスクリプトではわずかです。さらに重要な%:pことは、) はファイル名を完全な絶対パスに展開します(まだそうである場合とそうでない場合があります)。ただでは%あなたが忘れてしまった場合は、代わりに別のディレクトリに同じ名前のファイルを削除するリスクの小さなを実行して、あなたは:cdそこ編。
アーロントーマ2016

1
それをピオンしてくれてありがとう!それに応じて答えを更新しました。
joelostblom 2016

0

あなたは2つのステップでそれを行うことができます:

  1. 新しいファイルとして保存

    :w newfilename

  2. 古いファイルを削除します

    !rm oldfilename


0

これは人気のない意見かもしれませんが、ファイルツリーエクスプローラー(Netrw / NerdTree)は、ファイルを削除するための最も簡単で安全な方法になります。OPがNerdTreeを使用していない場合でも、組み込みのプラグインNetrwも同様に機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.