seçimi ayrı bir dosyaya taşı


12

Vim ile, bir metin parçasını yeni bir dosyaya nasıl taşıyabilirim? Şimdilik bunu yapıyorum:

  • metni seç
  • kullanım :w new_file
  • metni tekrar seç
  • metni sil

Bunu yapmanın daha etkili bir yolu var mı?

Önce

a.txt

sometext
some other text
some other other text
end

Sonra

a.txt

sometext
end

b.txt

some other text
some other other text

Yanıtlar:


4

Bu özel komutlara ne dersiniz:

:command! -bang -range -nargs=1 -complete=file MoveWrite  <line1>,<line2>write<bang> <args> | <line1>,<line2>delete _
:command! -bang -range -nargs=1 -complete=file MoveAppend <line1>,<line2>write<bang> >> <args> | <line1>,<line2>delete _

1
Bu çok çirkin, ama hey, tam olarak ne istediğimi bir adımda yapıyor gibi görünüyor (denedim). +1 ve kabul edildi. Bunu hızlı bir şekilde yapmanın yerel bir yolunu arıyordum, ancak bir tane görünmediğinden, seninki iyi olacak. Teşekkürler!
greg0ire

1
Güzellik bakanın gözlerindedir. Bunu oldukça zarif buluyorum; yalnızca bir kez yazmanız gerekir (.vimrc içine).
Ingo Karkat

Haklısın, "çok çirkin" şaşkınlık "çok tanıdık" olmuştur. Senin
emrin

8

"Bir metin parçasını yeni bir dosyaya taşı" derken, o metnin geçerli dosyadan kesilmesi ve yalnızca o metni içeren yeni bir dosya oluşturulması anlamına geldiğini varsayıyorum.

Çeşitli örnekler:

  • :1,1 w new_file 1 numaralı satırdan yalnızca metin içeren yeni bir dosya oluşturmak için
  • :5,50 w newfile satır 5'ten satır 50'ye metin içeren yeni bir dosya oluşturma
  • :'a,'b w newfileişareti metni içeren yeni bir dosya oluşturmak için aişaretineb
    • kullanarak mave mbistediğiniz yerde işaretlerinizi belirleyin

Yukarıdaki sadece metni kopyalar ve o metni içeren yeni bir dosya oluşturur. Daha sonra silmeniz gerekir.

Bu, aynı aralık ve dkomut kullanılarak yapılabilir :

  • :5,50 d metni satır 5'ten satır 50'ye silmek için
  • :'a,'b dişaretinden metni silmek için aişaretineb

Veya ddtek satırlık durum için kullanarak .

Bunun yerine metni görsel modu kullanarak seçer ve ardından :metin seçiliyken tuşuna basarsanız, komut satırında aşağıdakileri görürsünüz:

:'<,'>

Hangi seçilen metni gösterir. Daha sonra komutu şu şekilde genişletebilirsiniz:

:'<,'>w >> old_file

Hangi olacak eklemek varolan bir dosyaya metin. Sonra yukarıdaki gibi silin.


Bir astar:

:2,3 d | new +put! "

Arıza:

  • :2,3 d - 2'den 3'e kadar olan satırları silin
  • | - teknik olarak bu, ilk komutun çıktısını ikinci komuta yönlendirir, ancak ilk komut hiçbir şey çıktılamadığından, komutları birlikte zincirliyoruz
  • new - yeni bir tampon açar
  • +put! "- isimsiz kaydın ( ") içeriğini arabelleğe koyun
    • Bang ( !) oradadır, böylece içerik mevcut satırın önüne konur . Bu, dosyanın sonunda ve boş satır neden olur. Bu olmadan, dosyanın üstünde boş bir satır vardır.

Varsayımınız doğru. Bu iyi görünüyor, test edeceğim. Biraz daha açıklayabilir misiniz? Aralıklara pek aşina değilim. EDIT: Bunu ikinci satırda denerseniz, ilk satırı ikinci satıra değil, diğer dosyaya yazar.
greg0ire

@ greg0ire Bunu biraz geriye aldım, daha iyi açıklamak için düzenleyeceğim
embedded.kyle

Sorumu açıklığa kavuşturmak için bir örnek ekledim.
greg0ire

@ greg0ire Cevabımı düzelttim. Hala iki adım. İlk kopyalar ve yazar. İkincisi silinir.
embedded.kyle

1
Güzel çözüm! '<,'>d | new | 0put "Netlik için de yazabilirsiniz .
atripes

1

@ Embedded.kyle'ın cevabına ve bu Soru- Cevap'a dayanarak, bir dosyaya seçim eklemek ve mevcut dosyadan silmek için bu bir astarla sonuçlandım. İle bazı satırları seçtikten sonra Shift+V, tuşuna basın :ve çalıştırın:

'<,'>w >> test | normal gvd 

İlk bölüm seçilen satırları ekler. İkinci komut normal moda girer ve gvdson seçimi seçmek için çalışır ve ardından siler.


0

Metni görsel modda seçin, daha sonra yarabelleğe d" kopyalamak " (kopyalamak) veya arabelleğe ( silmek ) "silmek" için basın.

Daha sonra :split <new file name>vim pencerenizi bölmek pve bastırılmış metne yapıştırmak için tuşuna basabilirsiniz . Dosyayı normal şekilde yazın.

Bölmeyi tekrar kapatmak için kapatmak istediğiniz bölmeyi geçin :q.


1
Şu an için 4 adımım var: seç, yaz, seç, sil. Metodunuzla 6 adım var: seç, sil, böl, yapıştır, yaz, kapat. Daha verimli bir şey istedim: P
greg0ire

:xBunun yerine, bölünmeyi geçerseniz, yazma ve kapamayı bir araya getirip beş adımda yapabilirsiniz. : P
Xyon

Bu daha iyi, ama yine de 5> 4: P
greg0ire
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.