vim内から現在開いているファイルをディスクから削除するにはどうすればよいですか?バッファも閉じるといいでしょう。
私はあなたが見ることのためにNERDTreeを使用することができますが、私はこのプラグインを使用しないでください。
vim内から現在開いているファイルをディスクから削除するにはどうすればよいですか?バッファも閉じるといいでしょう。
私はあなたが見ることのためにNERDTreeを使用することができますが、私はこのプラグインを使用しないでください。
回答:
rm(1)などの外部ツールを使用することは問題ありませんが、Vimにはdelete()
ファイルを削除するための独自の機能もあります。これには、ポータブルであるという利点があります。
:call delete(expand('%'))
これを表現する別の方法:call delete(@%)
は、%
(現在のファイル)レジスタ(@accoladeによるヒント)を使用することです。
ディスク上のファイル表現とVimバッファーの両方で、現在のバッファーを完全にパージするには、次を追加します:bdelete
。
:call delete(expand('%')) | bdelete!
好みに応じてこれをマッピングすることをお勧めします。
r
コマンドを壊したくない!マッピングの前に<Leader>...
。を付けることをお勧めします。
nnoremap <C-Del> :call delete(expand('%'))<CR>
たが、誤って発生した場合に備えてバッファーを閉じません。それでもあなたはそれを保存するチャンスがあります。
:call delete(@%)|q!
←短いバリアント(マップしたくない場合)。(バッファはそのまま残り、この方法:ls
で復活させることができます:b
。ファイル名とバッファオプションは保持されますが、ファイルの内容は保持されません。)
:call delete(@%)|bd!
に使用:ls!
し:b
て使用する必要があるでしょう。
Vimコマンドでファイルを削除するを見てください。コメントセクションでは、あなたが探しているものを持っている必要があります。
基本的に、Rmは現在のファイルを削除します。RMは現在のファイルを削除し、バッファを(保存せずに)一度に終了します。
または、シェルコマンドを発行して、現在のファイルを削除することもできます。
:!rm %
!rm %
、vimがバッファに戻ったときの警告を回避する方法はありますか?
%
)を引用符で囲む必要があります!rm "%"
。
%
(ファイルパス(「ファイル名元々 、潜在的に相対的な、例えば、単にファイルの名前を呼び出したとしてvimの用語では」))の代わりに、%:p
(絶対ファイルパス)を使用すると、代わりに別のディレクトリに同じ名前のファイルを削除するリスクの小さなを実行し、あなたが:cd
そこで編集したことを忘れた場合。したがって、とにかくマップする場合では%:p
なく、を使用することを強くお勧めし%
ます。
プラグインは、単純な問題でも魅力的なソリューションになる場合があります。この場合、全能のティム・ポープによるeunuch.vimがあるので、私たちは幸運です。
それ自身の言葉でeunuch.vimは提供します
それを最も必要とするUNIXシェルコマンド用のVimシュガー。バッファと基になるファイルを同時に削除または名前変更します。
find
またはをlocate
クイックフィックスリストにロードします。等々。
完璧です。必要なものに加えて、UNIXシステムを使用している場合はいくつかの追加ツールがあります。
あなたが探しているコマンドは
:Remove!
繰り返しますが、必要に応じて再マップします:nnoremap <Leader>rm :Remove!<CR>
。
mv
、mkdir
、find
、などを非常にお勧めします。
私は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回押すだけです。
expand('%:p')
なく、を使用することを強くお勧めし@%
ます。(あなたが私のヒントを取り入れてくれてうれしいですが:)簡潔さの利点はスクリプトではわずかです。さらに重要な%:p
ことは、) はファイル名を完全な絶対パスに展開します(まだそうである場合とそうでない場合があります)。ただでは%
あなたが忘れてしまった場合は、代わりに別のディレクトリに同じ名前のファイルを削除するリスクの小さなを実行して、あなたは:cd
そこ編。
nnoremap rm :call delete(expand('%')) \| bdelete!<CR>
。あなたはあなたの答えを追加したいかもしれません。