Vi'de iki hatta nasıl katılabilirim?


169

Bir metin dosyasında aşağıdaki gibi iki satır var:

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

Vi aşağıdaki gibi iki satır eklemek istiyorum:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

İkinci satır silindi ve ikinci satırın içeriği ilk satıra eklendi.

Vi'deki komut modunu kullanarak nasıl yapabilirim?

Yanıtlar:


310

Shift+ Jsatır değiştirme karakterini geçerli satırdan kaldırır, böylece satırın herhangi bir yerinde "J" tuşuna basarak geçerli satırı ve sonraki satırı istediğiniz şekilde birleştirebilirsiniz.


9
büyük J satırlara katılır, küçük harf imleci hareket ettirir

4
Bu küçük bir J değil, büyük bir J idi; dolayısıyla Shift-J.
Jonathan Leffler

28
"satır değiştirme karakterini geçerli satırdan kaldırır" J'nin ne yaptığını tanımlamanın oldukça garip bir yoludur ve aynı zamanda doğru değildir. J bu çizgiyi bir sonrakine "birleştirir". Süreçte yeni satırı kaldırır, ancak boşlukları başka şekillerde de manipüle eder.
Laurence Gonsalves

5
Haha. GJiçinde vimson satıra geçecek ve bir sonraki satıra katılmaya çalışacak olursak, birleştirme komutunun tek yeri mantıklı değil. Evet, bu komik buldum :-)
Alok Singhal

2
Hala bu editörü kullanarak iki satıra katılmak için StackOverflow'a gitmem gerektiğini anlayamıyorum!
Manitra Andriamitondra

59

Vi veya Vim?

Her neyse, aşağıdaki komut Vim için 'uyumsuz' modda çalışır. Yani, sanırım neredeyse saf vi.

:join!

Bunu normal komut kullanımından yapmak istiyorsanız

gJ

'GJ' ile satırları olduğu gibi birleştirirsiniz - boşluk ekleyip çıkarmadan:

S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT

Sonuç:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT

'J' komutu ile sahip olacaksınız:

S<Switch_ID>_F<File type> _ID<ID number>_T<date+time>_O<Original File name>.DAT

Arasındaki boşluğu Not type>ve _ID.


2
Sadece g/pattern/joinVIM'de işe yaramazken işaret etmek istiyorum g/pattern/J. Gelecekteki bazı insanlara yardımcı olabilir.
jisaacstone

Desenle birleştirmenizi seviyorum, ancak beyaz boşluklu iki çizgiyi birleştiriyor. Neyse beyaz boşluk olmayan bir desenle iki çizgiyi birleştirmek için?
David.Chu.ca

g / desen / join! öyle görünüyor.
fortboise

1
Daha karmaşık olabilir mi, lütfen! :-)
Johannes Overmann

22

Bunu yapmalı:

J


6
'J' hatlara katılırken ekstra alan sağlar.
Maxim Kim

3
@MaximKim: İşte bu yüzden . Not :h Jnasıl bu özelliği devre dışı bırakmak için söyleyecektir.
ereOn

2
gJÇizgilere katılırken
vim'in

17

Vi'de, J(bu Shift+ J) ya :joinda çoğunlukla istediğinizi yapmalısınız. Boşluğu ayarladıklarını unutmayın. Özellikle, birçok durumda birleştirilmiş iki çizgi arasında bir boşluk ile sonuçlanırsınız ve ikinci satır girintiye girilirse, girintinin katılmadan önce kaldırılacağı.

Vim'de gJ( G, ardından Shift+ J) veya tuşlarını da kullanabilirsiniz :join!. Bunlar, boşluk ayarlamaları yapmadan satırlara katılır.

Vim'de :help Jdaha fazla bilgi için bkz .


Kullanarak bir uyarı gJve Jolduğunu hem chang katılmadan noktasına imleç, ancak :join!ve :joindo not.
SergioAraujo

4

Sadece " \n" yerine "" yazın.

Belgedeki her satır için vi / Vim'de:

%s/>\n_/>_/g

Her değiştirme işlemini onaylamak istiyorsanız:

%s/>\n_/>_/gc


1

İlk satırda Shift+ 4("$"), ardından Shift+ j("J") tuşlarına basın .

Ve yardım istiyorsanız, vi'ye gidin ve düğmesine basın F1.


3
$ satır sonuna taşınır, ancak J için gerekli değildir

1
J'nin çizgilere katılabilmesi için çizginin sonunda olmanız gerekmiyor.
Jonathan Leffler

1
Aslında, $ tuşuna basmak gerekli değildir.
Laurence Gonsalves

1
@laurence .pressing $, imlecin yeni satır tüzüğünün hemen yanına yerleştirilmesini sağlar ve bu bir zorunluluktur.
Vijay


1

İmleci o satıra yerleştirmeden iki satırı birleştirmenin başka bir yolu:

:6,6s#\n##

Burada 6, başka bir satırın birleştirileceği satır numarasıdır. Satır numarasını görüntülemek için tuşunu kullanın :set nu.

Bir sonraki satırın birleştirilmesi gereken imleç üzerindeysek:

:s#\n##

Her iki durumda da biz gerek yok ggibi :s#\n##gçünkü tek satıra tek üzerinde, \nsağlıklı olur.


Shift+VSonuncusu hariç birleştirilecek tüm satırları seçmek daha kolaydır ve daha sonra :'<,'>s/\n/, /bu örnekte, her birinin sonuna bir virgül ve boşluk koyarken satırları birleştirmek daha kolaydır . Bir şey seçildiğinde ve :normal modda '<,'>yazdığımızda, komut satırında otomatik olarak görünür.
Evgeni Sergeev

Tercih edilen sınırlayıcıyla seçilen birden çok satır birleştirmesi için iyi. Normal modda mı yoksa görsel modda mı bir yazım hatası buldunuz?
vusan
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.