Seçili bir metin bloğundaki metin nasıl kısmen değiştirilir?


14

Benim sorunum için güzel bir başlık bulmak kolay değil.

Bir metin bloğunun önüne eklemenin farkındayım:

Ctrl- v satır türü metin seçmeI ESC

Şimdi bunu yapmak istiyorum ama aynı zamanda blok seçimimdeki bir parçayı değiştirerek. Şu anda iki işlem yapıyorum

Ctrl- v seç bloğu x başlatmak için geri dön

Bunu yukarıda bahsettiğim dizi izledi.

Bloğu sadece bir kez seçerek ( Ctrl- v) bu iki işlemi birleştirmenin bir yolu var mı ?

İşte küçük bir örnek:

Aşağıdaki bloğu dönüştürmek istiyorum

1  text
2  text
3  text
4  text
5  text

içine

new text 
new text 
new text 
new text 
new text

sadece bir "operasyon" yapıyor.


1
Ne istediğinden% 100 emin değilim, belki gerçek bir örnek yardımcı olacaktır (sahip olduklarına karşı ne istersen). GV'nin farkında mısınız? Son görsel seçimi yeniden seçer ve burada yardımcı olabilir.
PhilippFrank

Yanıtlar:


21

Bloğunuzu cseçtikten sonra seçtiğinizde x, seçim bloğundaki metin kaldırılır ve ekleme moduna girilir. Bir şey yazıp ekleme modundan çıktıktan sonra her satırda aynı değişikliğe sahip olmalısınız.

Deneyin

Ctrl- v- blok seç - c- her şeyi ekle -Esc


1
    1
   1 1
  1   1
 1111111
 1     1
 1     1
 1     1

Yukarıdaki gibi üç farklı blok harflik bir satır hayal edin. ^VYukarıdakileri seçerken, Aeşit olmayan uzunluk çizgileri nedeniyle satırdaki son harfin tümünü değiştiremedim . Önceki blok harfleri :s/\%V1/T/g "Önceki Blok harfleri " 1'lerden yapılan bir T idi /T/. "

Ancak yukarıda gösterilen son blok harfini seçerek tüm '1'leri' A 'yerine A * noktasına değiştirdi ve geri kalanı kaldı.

* En kısa hat.

Tüm çizgileri aynı uzunlukta yapmak için onları boşluklarla doldurdum. (Vim'de yeniyim, bu yüzden daha iyi bir senaryo yazılabileceğinden eminim.)

Not: A'nın zirvesi 2. satırda başladı.

let Maxlen = 0
" Find longest line
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a > Maxlen
        Maxlen = a
    endif
endfor

" Append spaces 'til all lines are the same length.
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a < Maxlen
        let b = Maxlen - a
        execute "normal!" . i . "gg0" . b . "A "
    endif
endfor

Bundan sonra :s/\%V1/T/g , satırdaki son blok harfinde ilan edildiği gibi çalıştı.

Not: executeYukarıdaki çizginin noktalar olmadan çalışması gerektiğini okudum , ama benim için işe yaramadı.


Satırı yürüt, blok harfinin i satırının başlangıcına git ve satırın sonuna b boşluk ekle. 'b', geçerli çizgi ile en uzun çizgi arasındaki uzunluk farkıdır.
Ron
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.