Vim'deki her satırın sonuna nasıl dize ekleyebilirim?


258

*Vim'deki her satırın sonuna eklemek istiyorum .

Kodu başarısız bir şekilde denedim

:%s/\n/*\n/g

Sevgiler çünkü sağ tarafta çalışmıyor :s///, \nbir boş karakter karşılık gelir. Bölüm :help sub-replace-specialönemlidir.
doubleDown

Yanıtlar:


355

:%s/$/\*/g

çalışmalı. Yani gerektiği :%s/$/*/gşekilde MrWiggles doğru işaret ediyor.


Tüm satırlar aynı uzunlukta olmadığından, aynı sütuna ' ' eklemenin bir yolu var mı ?
Aman Jain

11
hat başına sadece 1 EOL vardır, bu nedenle gbayrak gereksizdir.
doubleDown

Her satırın başına / eklemek istedim: 1, $ s / ^ / \ / g benim için çalıştı.
farooqsadiq

@dirkgently Bir dize değişkenini bu komuta bağımsız değişken olarak nasıl iletebilirim (* yerine biliyorsunuz)?
Matheus Rotta

353

Şundan bile daha kısa: arama komutu:

:%norm A*

Anlamı bu:

 %       = for every line
 norm    = type the following commands
 A*      = append '*' to the end of current line

28
Dostum, bir şey öğrenmediğim vi veya vim ipliği yok. Bugün normu öğreniyorum. Ve Cheers'de dedikleri gibi, "Norm!"
smcameron

4
Önekleme için sadece 0i * kullanırsınız, 0 sizi satırın başına götürür, ekleme modu için i ve * için *. D:
Rob

7
Bir VimGolfer olarak size yardım edemem ama bunu kullanmak I*yerine 0i*bir tuş vuruşu kaydedersiniz .
Jedidiah Hurt

24
Diğer bir ipucu: Bu, aralıklar için de geçerlidir. Görsel modda çizgileri vurgulayın ve düğmesine basın :, bu daha :'<,'>sonra içine girebileceğiniz komutu önceden dolduracaktır:'<,'>norm A*
Jedidiah Hurt

8
Prepending için, Ibunun yerine kullanın -:%norm I*
Just Lucky Really

42

Ayrıca:

:g/$/norm A*

Ayrıca:

gg<Ctrl-v>G$A*<Esc>

Ahhh ... İkincisi de bir dizi çizgi ile kullanılabilir. Güzel!
Tim Fletcher

İlk örneği açıklar mısınız?
Cody Poll

@CodyPoll g, globaleşleşen her satırda bir şeyler yapan komuttur. $her satırla eşleşir. Ayrıca ^veya olabilir .*. norm, normalde komut modunda kullandığınız komutları yürütür. Yani satır sonuna A*eklemek anlamına gelir *.
9'da defhlt

42

Görsel blok modunu kullanmak, bu tür şeylerle başa çıkmak için daha iyi ve daha çok yönlü bir yöntemdir. İşte bir örnek:

This is the First line.  
This is the second.  
The third.

"Merhaba dünya" yı eklemek için. (boşluk + pano) bu satırların her birinin sonunda:

  • İlk satırdaki bir karakterde Ctrl-V (veya Ctrl-V yapıştır ise Ctrl-Q) tuşlarına basın.
  • Görsel bloğu üç satıra uzatmak için jj tuşuna basın.
  • Görsel bloğu her satırın sonuna kadar genişletmek için $ tuşuna basın. A'ya ve ardından boşluklara basın ve Hello world yazın. + sonra Esc.

Sonuç:

This is the First line. Hello world.  
This is the second. Hello world.  
The third. Hello world.  

( Vim.Wikia.com sitesinden örnek )


3
jjBiri basmak yerine Gson satıra geçmek için vurabilirsiniz . Bu, json satıra kadar basmanın pratik olmadığı büyük dosyalarda kullanışlıdır.
nash

Görsel bloğun burada en temiz, daha genişletilebilir olduğunu kabul edin
Peter Dolan

Bunun ilk başta tüm satırlarda çalıştığını düşünmüyorsunuz, ancak Esc tuşuna bastıktan sonra geçiyor ve herkese ekliyor.
Noumenon

Visual Block, vim'i VS Code gibi başka şeyler için bir uzantı olarak kullanırken sorunlara ve hatalara neden olur. Bu durumlarda, orijinal kullanıcının istediği arama ve değiştirme güvenilir seçenektir.
Brettins

Büyük Harf kullandığınızdan emin olun, küçük harf "a" çalışmaz.
Jeff Hoye

14

Her satırın sonuna Merhaba dünya eklemek istiyorsanız:

:%s/$/HelloWorld/

Bunu, örneğin 20'den 30'a kadar olan belirli sayıda satır için yapmak istiyorsanız:

:20,30s/$/HelloWorld/

Her satırın başında bunu yapmak istiyorsanız şunu kullanın:

:20,30s/^/HelloWorld/

6

gSonunda gerçekten ihtiyacınız yok . Böylece olur:

:%s/$/*

Ya da sadece *sonunu istiyorsanız, 14-18 satırlarını söyleyin:

:14,18s/$/*

veya

:14,18norm A*


5

Bir seçenek:

:g/$/s//*

Bu, her hat ucu çapasını bulur ve onunla değiştirir *. Ben "ikame" diyorum ama gerçekte, çapa normal bir karakterden ziyade özel bir şey olduğu için daha fazla bir ek. Daha fazla bilgi için, bkz. G'nin Gücü - Örnekler .


Normal ifadede s // ne anlama geliyor? Benzer bir komut biliyorum,: g / / / p, (grep). En azından yapıda emrinin benimkine yakın olduğundan eminim.
Léo Léopold Hertz 준영

1
S yerine kullanılır - çizgi ucunun ucunu yıldız işareti ile değiştirir (bir çapa noktası olduğu için aslında yerine geçmez).
paxdiablo

3
% S / \ n / * \ r / g

İlki başka bir yerde doğrudur, ancak Vim'in bir nedenden ötürü farklı yeni satır işlemlerine sahip olması gerekir.


Vim \ n sürümümde çalışıyor, ancak bu sadece yeni satırı bir * ile değiştiriyor ve satırları etkili bir şekilde birleştiriyor.
Nathan Fellman

1
Bu komut, denediğim her Vim sürümünde iyi çalıştığı doğrulandı. Windows sürümünü falan mı kullanıyorsunuz?

1
%s/\s*$/\*/g

bu hile yapacak ve önde gelen alanların göz ardı edilmesini sağlayacaktı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.