2011-12-19 31 views
6

Tôi đang gặp vấn đề với việc lựa chọn hình ảnh và chạy biểu thức chính quy thay thế. Khi tôi chọn một số văn bản không chứa toàn bộ liên tiếp, và nhấn: để mang lại dòng lệnh lên, và làm điều gì đó nhưLựa chọn trực quan Vim và regexp

:s/T/t/ 

Sau đó, trận đấu đầu tiên trên dòng (cho dù đó là lựa chọn hay không) được thay đổi . Vì vậy, ví dụ, tôi có văn bản

Test Text here 

và tôi trực quan chọn từ chữ, sau đó chạy sự thay thế ở trên, tôi kết thúc với

test Text here 

mà không phải là những gì tôi muốn.

Bất kỳ ý tưởng nào về cách đạt được kết quả đúng?

Edit: Các dòng lệnh thực tế là

'<,'>s/T/t/ 

như vỡ bởi Vim khi bạn bấm: với một lựa chọn hình ảnh.

Trả lời

10

Bạn có thể sử dụng \% V (xem http://vimdoc.sourceforge.net/htmldoc/pattern.html#//%V)

\%V Match inside the Visual area. When Visual mode has already been 
    stopped match in the area that |gv| would reselect. 
    This is a |/zero-width| match. To make sure the whole pattern is 
    inside the Visual area put it at the start and end of the pattern, 
    e.g.: 
     /\%Vfoo.*bar\%V 
    Only works for the current buffer. 

Vì vậy:

:s/\%VT/t/ 

Nếu bạn muốn thay thế nhiều lượt truy cập, thêm/g

:s/\%VT/t/g 
+1

theo ': h% V', bạn nên bọc toàn bộ s tìm kiếm mẫu trong '\% V' nếu bạn muốn đảm bảo mẫu nằm bên trong vùng chọn. Giống như: ': s/\% Vlongpattern \% V/short /'. – m0tive

+0

@ m0tive: Tôi đã trích dẫn tài liệu về điều đó. Và, khi các mô hình là nhân vật duy nhất mà không phải là hữu ích – sehe

+0

bạn chỉ là quá nhanh cho tôi ;-) – m0tive

Các vấn đề liên quan