Vim'de her satırın sonuna nasıl metin eklenir?


117

Vim'de şu metin var:

key => value1
key => value2
key => value1111
key => value12
key => value1122222

Her satırın sonuna "" eklemek istiyorum. Önceki metin aşağıdaki gibi olacaktır:

key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,

Bunun nasıl yapılacağını bilen var mı? Bunu başarmak için görsel blok modunu kullanmak mümkün mü?


Benzer soru burada .
glts

Yanıtlar:


163

Bu, dosyayı dosyadaki her satıra yapacak:

:%s/$/,/

Tüm dosya yerine bir satır alt kümesi yapmak istiyorsanız, bunları %.

Bunun bir yolu, görsel bir seçim yapmak ve ardından :. :'<,'>Sizin için dolduracak , sonra geri kalanını yazacaksınız (Yalnızca eklemeniz gerektiğine dikkat edin s/$/,/)

:'<,'>s/$/,/

4
Son satırda fazladan 'olmalı, olmalıdır :'<,'>s/$/,/.
cjg

neden a'ya gerek yok g? ( :'<,'>s/$/,/g)
Thorbjørn EK Christensen

@ ThorbjørnE.K.Christensen çünkü /$/zaten sadece bir kez eşleşiyor.
Bubaya

158

Aslında bunu Görsel blok modunu kullanarak yapmanın bir yolu var. $AGörsel blok modunda basılması , seçimdeki tüm satırların sonuna eklenir. Eklenen metin, düğmesine bastığınız anda tüm satırlarda görünecektir.Esc .

Dolayısıyla bu olası bir çözüm:

vip<C-V>$A,<Esc>

Yani, Normal modda, Görsel bir paragraf seçin vip, Görsel blok moduna geçin CTRLV, tüm satırlara $Avirgül ekleyin ve ,ardındanEsc onaylamak için .

Belgeler şu adreste :h v_b_A . O örnekler bölümünde nasıl çalıştığını gösteren bir illüstrasyon bile yoktur: :h v_b_A_example.


1
Hayır, bu standart Vim'dir: Görsel blok modunda (ile C-V) birkaç satır seçin, ardından imleci satırın sonuna getirin $ve hepsine ekleyin A. Seveceksin :h v_b_A, ki bu gerçekten eksiksiz.
glts

1
Oh, neler olduğunu anlıyorum! Ekleme modundan çıkmak için genellikle <Esc> yerine Ctrl-C kullanıyorum ve görünüşe göre Ctrl-C ile bu çalışmıyor! Ne kadar garip.
weronika

3
<C-V>ipYerine kullanarak bir tuş vuruşunu kaydedebilirsiniz vip<C-V>.
Aaron Thoma

1
@accolade, bu şekilde görsel blok moduna girmez ve çalışmaz. Bu şekilde yaparsanız, <CV> tekrar olması gerekir.
imagineerThat

@imagineerBu, garip - benim için çalışıyor - bazı varsayılan olmayan seçeneklerden kaynaklanıyor olmalı. (Değil 'virtualedit'- bunu test ettim.) Temiz bir vim'de çalışmadığını onaylıyorum. Not için teşekkürler!
Aaron Thoma


33

eski mod en kolayı:

:%s/$/,

: - enter command mode
% - for every line
s/ - substitute
$ - the end of the line
/ - and change it to
, - a comma

10

Yedek komut görsel bir seçime uygulanabilir. Eğer değişim istediğiniz hatları üzerinden görsel bir blok yapın ve yazın :ve komut satırı şöyle başlatıldı olduğunu haber: :'<,'>. Bu, ikame komutunun görsel seçim üzerinde şu şekilde çalışacağı anlamına gelir:

:'<,'>s/$/,/

Ve bu, bahsettiğiniz her satırın sonunda virgül kullanmak istediğinizi varsayarak, örneğiniz için işe yarayacak bir ikame . Sonunda boşluklar varsa, komutu buna göre ayarlamanız gerekebilir:

:'<,'>s/\s*$/,/

Bu, satırın sonundan önceki herhangi bir boşluk miktarını virgülle değiştirerek sondaki beyaz boşluğu etkin bir şekilde kaldırır.

Aynı komutlar aşağıdaki 5 satır için bir çizgi arasında, örneğin çalışabilir: :,+5s/$/,/veya tüm tampon için: :%s/$/,/.


3

'Key' ile başlayan satırların sonuna ',' eklemek istiyorsanız, şunu kullanın:

:%s/key.*$/&,

Veya :g/key/s/$/,. Bakın :help :global.
romainl

2

Ben <M-DOWN>eşleştirilmiş (aşağı ok alt) <DOWN>.çok çabuk hattı dizisinin son komutu tekrar edebileceği şekilde. bu eşleme ile şunları yapabilirim:

A,<ESC>

Ardından, virgülü her satırın sonuna eklemek için arka arkaya basarken alt tuşunu basılı tutun.
Bu benim için iyi çalışıyor çünkü satırların ne işe yaradığı ve değişikliği almadığı konusunda çok iyi bir kontrol sağlıyor.
(Ayrıca, kolayca tekrarlanmasını sağlamak için benzer şekilde eşleştirilen diğer okları da aldım .)

İşte vimrc'nize yapıştırılacak eşleme satırı:

map <M-DOWN> <DOWN>.

1
:%s/$/,/g

$ satırın sonuyla eşleşir


2
Bu ekleyecek $ sadece çizgiye de, .
ZyX

2
/gbir satırdaki her olayda değiştirmeyi gerçekleştirmek için kullanılır. Çünkü $bir satırda sadece bir tane var, güvenle bırakabilirsiniz.
romainl

Evet, benim hatam, $. ve / g alışkanlık kaynaklıdır ve evet isteğe bağlıdır.
kalhartt

1

Aşağıdaki Makro da görevinizi gerçekleştirmek için kullanılabilir.

qqA,^[0jq4@q
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.