Bagaimana cara mengganti hanya dalam pemilihan visual?

27

Bagaimana cara mendapatkan vim untuk mengganti karakter dalam pemilihan visual saja dan tidak di tempat lain di telepon? Contoh:

  • Baris: int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
  • Seleksi Visual: { 00 01 02 03 04 05 05 /*... lots more like this*/}
  • Perintah: :'<,'>s/\ /\,0x/g
  • Diharapkan: int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};

Namun setelah melakukan tindakan ini, hasil yang sebenarnya adalah:

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

Apakah ada cara untuk mengubah perintah di atas untuk menghasilkan hasil yang diharapkan? Tidakkah '<dan '>menentukan kisaran tempat perintah pencarian (dan ganti) bekerja?

Bhargav Bhat
sumber
2
Saya tidak tahu jawabannya, tetapi saya tahu bahwa :substituteoperator berdasarkan garis demi garis, yang menjelaskan apa yang Anda lihat dalam contoh Anda.
Karl Yngve Lervåg

Jawaban:

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

%Vcocok di dalam area visual. Lihat :help %V.

VenkatH
sumber
1
Harus disebutkan, bahwa solusi ini hanya memverifikasi, bahwa permulaan pertandingan ada di dalam pemilihan visual .
Christian Brabandt
7

Ada \%Vuntuk itu, lihat :h %V:

\% V

Cocokkan di dalam area Visual. Ketika mode Visual telah dihentikan, cocokkan di area yang akan dipilih kembali oleh gv. Ini adalah kecocokan / lebar nol. Untuk memastikan keseluruhan pola ada di dalam area Visual, letakkan di awal dan akhir pola , misalnya:> /\%Vfoo.*bar\%V

Untuk mengganti foodengan bardalam pemilihan saja, gunakan:

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

Dalam kasus khusus ini:

:'<,'>s/\%V\ \%V/\,0x/g
pencuci mulut
sumber
4

Jika Anda ingin mengganti dalam blok visual , Anda dapat menggunakan vis.vimplugin .

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

Untuk memasang:

Unduh vis.vba.gz dari http://www.drchip.org/astronaut/vim/index.html#VIS

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

# Source the open file.
:so %

# Quit Vim
:q

Setelah diinstal:

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

Saat Anda mengetik :B, Anda akan melihat ini

:'<,'>B 

Tidak apa-apa, itu hanya vim mengatakan bahwa perintah akan berlaku untuk blok visual yang saat ini dipilih.

Bahkan lebih baik, Anda dapat melakukan perintah Ex pada blok visual, bukan hanya substitusi. Sebagai contoh :B !sort.

Christian Long
sumber