Mevcut dosyayı vim'de nasıl silebilirim?


Yanıtlar:


102

Rm (1) gibi harici bir araç kullanmak iyidir, ancak Vim'in ayrıca delete()dosyaları silmek için kendi işlevi vardır . Bunun taşınabilir olma avantajı vardır.

:call delete(expand('%'))

Bunu ifade etmenin alternatif bir yolu :call delete(@%), %(mevcut dosya) yazmacını (@accolade ile ipucu) kullanmaktır.

Geçerli arabelleği, hem diskteki dosya gösterimini hem de Vim arabelleğini tamamen temizlemek için şunu ekleyin :bdelete:

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

Muhtemelen bunu tercihlerinize göre haritalamak isteyeceksiniz.


7
Teşekkürler! .Vimrc aşağıdaki harita çalışması gibi görünüyor: nnoremap rm :call delete(expand('%')) \| bdelete!<CR>. Cevabınıza eklemek isteyebilirsiniz.
fotanus

13
Bu haritalama ideal değil. rEmri bozmak istemiyoruz ! Eşlemenize ile daha iyi önek ekleyin <Leader>....
glts

2
Kullanarak Ctrl + Del ile eşledim nnoremap <C-Del> :call delete(expand('%'))<CR>ancak yanlışlıkla olması durumunda tamponu kapatmıyorum; o zaman onu kurtarmak için hala bir şansın var.
Evgeni Sergeev

3
:call delete(@%)|q!← Kısa varyant (haritalamak istemiyorsanız). (Arabellek içeride kalır :lsve bu şekilde yeniden canlandırılabilir :b; dosya adı ve arabellek seçeneklerini korur, ancak dosya içeriğini
korumaz

2
@accolade, senin numara gibi, ama kullanmak gerekir :call delete(@%)|bd!kullanımı ve :ls!birlikte :bcanlandırmak için.
Bart Louwers

88

Bir Vim komutuyla dosyaları sil'e bir göz atın . Yorumlar bölüm aradığınızı olmalıdır:

Temel olarak, Rm mevcut dosyayı silecektir; RM, mevcut dosyayı silecek ve tek seferde arabelleği (kaydetmeden) çıkaracaktır.

Alternatif olarak, mevcut dosyayı kaldırmak için bir kabuk komutu verebilirsiniz:

:!rm %

1
O kadar basit ki, bunun için bir senaryo oluşturmam gerektiğine neredeyse inanamıyorum. Teşekkürler.
fotanus

3
ile silme !rm %, vim arabelleğe geri döndüğünde uyarıdan kaçınmanın bir yolu var mı?
fotanus

1
Dosya adında bazı özel karakterler varken, bu komut çalışmaz, örneğin dosya adı boşluğu olan 20130711-kişiler # 285.vcf ise, "rm:" 20130711-kişileri kaldıramaz "der: Böyle bir dosya yok veya dizini '
Saeed

4
@ saeed144, bir dosya adı (ya da diğer karakterler Eğer kabuk düzeyinde yorumlanır istemiyorum) içinde boşluk durumda, dosya adı (surround isteyeceksiniz %tırnak): !rm "%".
David Cain

8
VERİ TEHLİKESİ UYARISI! Sadece %( mutlak dosya yolu) yerine (mutlak dosya yolu) yerine sadece ( vim terminolojisinde dosya yolu ( vim terminolojisinde " dosya adı "), potansiyel olarak göreceli, örneğin sadece dosyanın adı) %:pile aynı adı taşıyan bir dosyayı başka bir dizinde silmenin küçük bir riski vardır, :cdorada olduğunu unuttuysan Bu nedenle , yine de haritalamak %:pyerine kullanmanızı şiddetle tavsiye ederim %.
Aaron Thoma

25

Bazen bir eklenti, basit bir problem için bile çekici bir çözüm olabilir. Bu durumda , yüce Tim Pope'un hadım.vim'i olduğu için şanslıyız .

Kendi sözleriyle eunuch.vim sağlar

En çok ihtiyaç duyan UNIX kabuk komutları için Vim sugar. Aynı anda bir arabelleği ve temel alınan dosyayı silin veya yeniden adlandırın. Quickfix listesine a findveya a yükleyin locate. Ve bunun gibi.

Mükemmel. İhtiyacımız olan şey, artı bir UNIX sistemindeysek bazı ek araçlara sahiptir.

Aradığınız komut

:Remove!

Yine, çok ihtiyacınız varsa yeniden eşleştirin, örneğin :nnoremap <Leader>rm :Remove!<CR>.


Eklentisiz yapmanın bir yolunu arıyordum, bu yüzden diğer cevabınızı kabul edeceğim. Eklenti iyi görünüyor :-)
fotanus

Eğer vim yollar gerekiyorsa bu eklenti oldukça uygundur mv, mkdir, findvb Tavsiye ederim.
Ehtesh Choudhury

5

Dosyaları vim içinden silebilmeyi seviyorum, ancak aynı zamanda, şu ya da bu nedenle henüz sürüm kontrolü altında olmayan önemli işleri yanlışlıkla silme konusunda da paranoyaklaşıyorum. @Glts ve @accolade'deki önceki bilgileri, vim'den çıkmadan önce komut istemi için nasıl kullanılacağına ilişkin bu yanıtla birleştirmeyi yararlı buluyorum confirm.

Bunları bir araya getirerek, ~/.vimrcdosyayı silmeden ve arabelleği kapatmadan önce soran ve bir tuş kombinasyonuyla eşleştiren bir işlev ekledim :

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

Eğer benden daha az paranoyak bir tuşa basarsanız <CR>, ilk satıra ekleyebilirsiniz .

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

ve yalnızca bir kez return tuşuna basmanız gerekir.


1
Yine de komut dosyası oluştururken kullanmak expand('%:p')yerine kullanmanızı şiddetle tavsiye ederim @%. (İpucumu dahil ettiğiniz için gurur duyarken :) kısalık faydası bir senaryoda marjinaldir. Daha da önemlisi %:p:) dosya adını tam mutlak yola (zaten olabilir veya olmayabilir ) genişletir. Sadece %, :cdorada kaldığınızı unuttuysanız, bunun yerine başka bir dizindeki aynı isimli bir dosyayı silme riskiyle karşı karşıya kalırsınız .
Aaron Thoma

1
Bunu umursadığın için teşekkürler! Cevabımı buna göre güncelledim.
joelostblom

0

Bunu iki adımda yapabilirsiniz:

  1. yeni bir dosya olarak kaydet

    : w yeni dosya adı

  2. eski dosyayı sil

    ! rm eski dosya adı


0

Bu popüler olmayan bir fikir olabilir, ancak dosya ağacı gezgininiz (Netrw / NerdTree) bir dosyayı silmenin en basit ve en güvenli yolu olacaktır. OP NerdTree kullanmasa bile, yerleşik eklenti Netrw de aynı şekilde çalışacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.