Sadece görsel seçimde nasıl değiştirilir?


27

İnsan, görsel seçim içindeki bir karakteri , çizginin başka bir yerine değil, sadece nasıl değiştirebilir ? Örnek:

  • Hat: int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
  • Görsel Seçim: { 00 01 02 03 04 05 05 /*... lots more like this*/}
  • Komut: :'<,'>s/\ /\,0x/g
  • Beklenen: int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};

Ancak bu işlemleri yaptıktan sonra gerçek sonuç:

int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and so on*/};

Beklenen sonucu elde etmek için yukarıdaki komutu değiştirmenin bir yolu var mı? Yapmaz '<ve '>komutları çalışır aralığı üzerinde arama define (ve değiştirme)?


2
Cevabı bilmiyorum, ama :substituteoperatörlerin satır bazında çalıştığını biliyorum , bu da örneğinizde ne gördüğünüzü açıklıyor.
Karl Yngve Lervåg

Yanıtlar:


32
:'<,'>s/\%V\ /\,0x/g

%Vgörsel alanın içinde eşleşir. Bakın :help %V.


1
Bu çözümün yalnızca eşleşmenin başlamasının görsel seçimin içinde olduğunu doğruladığı belirtilmelidir .
Christian Brabandt

7

Bunun \%Viçin var, bakın :h %V:

\% V

Görsel alan içerisinde eşleştirin. Görsel mod zaten durdurulduğunda, gv'nin tekrar seçeceği alanda eşleşme yapın. Bu bir / sıfır genişlik eşleşmesidir. Tüm kalıbın Görsel alanın içinde olduğundan emin olmak için, kalıbın başına ve sonuna koyun , örneğin:> /\%Vfoo.*bar\%V

Değiştirmek için footarafından barseçimi sadece, kullanım içinde:

:'<,'>s/\%Vfoo\%V/bar/
:'<,'>s/\%Vfoo\%V/bar/g
:'<,'>s/\%Vfoo\%V/bar/cg

Bu özel durumda:

:'<,'>s/\%V\ \%V/\,0x/g

4

Görsel bir blok içinde yer değiştirmek istiyorsanız , vis.vimeklentiyi kullanabilirsiniz .

http://vim.wikia.com/wiki/Applying_substitutes_to_a_visual_block

Yüklemek:

Vis.vba.gz dosyasını http://www.drchip.org/astronaut/vim/index.html#VIS adresinden indirin.

# Open vis.vba.gz in Vim 7.1 or later.
vim vis.vba.gz

# Source the open file.
:so %

# Quit Vim
:q

Kurulduktan sonra:

ctrl-v to enter visual-block mode
Move to select the block you want
:B s/pattern/newtext/

Yazarken bunu :Bgöreceksiniz

:'<,'>B 

Sorun değil, komutun o an seçili olan görsel bloğa uygulanacağını söylemek çok kolay.

Daha da iyisi, sadece değiştirme yerine görsel blokta herhangi bir Ex komutu uygulayabilirsiniz. Örneğin :B !sort.

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.