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.