Làm thế nào để chỉ thay thế trong lựa chọn trực quan?


27

Làm thế nào để có được vim để thay thế một nhân vật trong vùng lựa chọn hình ảnh chỉ và không ở đâu đó trên đường? Thí dụ:

  • Hàng: int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/};
  • Lựa chọn trực quan: { 00 01 02 03 04 05 05 /*... lots more like this*/}
  • Chỉ huy: :'<,'>s/\ /\,0x/g
  • Kỳ vọng: int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/};

Tuy nhiên, sau khi thực hiện các hành động này, kết quả thực tế là:

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

Có cách nào để sửa đổi lệnh trên để tạo ra kết quả mong đợi không? Không '<'>xác định phạm vi mà các lệnh tìm kiếm (và thay thế) hoạt động?


2
Tôi không biết câu trả lời, nhưng tôi biết rằng các :substitutetoán tử trên cơ sở từng dòng, điều này giải thích những gì bạn đang thấy trong ví dụ của bạn.
Karl Yngve Lervåg

Câu trả lời:


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

%Vphù hợp trong khu vực thị giác. Xem :help %V.


1
Cần phải đề cập rằng giải pháp này chỉ xác minh, rằng bắt đầu của trận đấu nằm trong lựa chọn trực quan .
Christian Brabandt

7

\%Vđiều đó, xem :h %V:

\% V

Phù hợp bên trong khu vực Visual. Khi chế độ Visual đã bị dừng khớp trong khu vực mà gv sẽ chọn lại. Đây là một trận đấu có độ rộng / không. Để đảm bảo toàn bộ mẫu nằm trong khu vực Visual, hãy đặt nó ở đầu và cuối của mẫu , ví dụ:> /\%Vfoo.*bar\%V

Để thay thế foobằng chỉ bartrong lựa chọn, sử dụng:

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

Trong trường hợp cụ thể này:

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

4

Nếu bạn muốn thay thế trong một khối trực quan , bạn có thể sử dụng vis.vimplugin .

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

Để cài đặt:

Tải xuống vis.vba.gz từ 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

Một lần được cài đặt:

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

Khi bạn gõ :B, bạn sẽ thấy điều này

:'<,'>B 

Điều đó tốt, chỉ cần nói rằng lệnh sẽ áp dụng cho khối hình ảnh hiện được chọn.

Thậm chí tốt hơn, bạn có thể thực hiện bất kỳ lệnh Ex nào trên khối trực quan, không chỉ thay thế. Ví dụ :B !sort.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.