Làm thế nào để chọn lọc thay đổi một chuỗi hightlighted?


11

Bằng cách tìm kiếm, tôi đã đánh dấu chuỗi mà tôi muốn thay đổi. Bây giờ tôi muốn chỉ thay thế văn bản được tô sáng. Tôi đang sử dụng nđể chuyển sang phiên bản tiếp theo của chuỗi tìm kiếm. Tôi đã nghĩ rằng tôi có thể làm một cái gì đó như thế ciwnhưng điều đó thay đổi toàn bộ từ không chỉ là văn bản được tô sáng.

Tôi quen thuộc :%s/old/new/gnhưng tôi không muốn thay đổi tất cả các trường hợp. Thay vào đó, tôi muốn chuyển con trỏ của mình đến từng phiên bản và sau đó quyết định có thay đổi nó không.

Câu trả lời:


16

Sử dụng gnchuyển động để chỉnh sửa kết quả tìm kiếm hiện tại. Ví dụ sau sẽ thay đổi kết quả khớp hiện tại thành "FooBar":

cgnFooBar

Phần tuyệt vời về kỹ thuật này là bạn có thể lặp lại thay đổi thông qua .. Giả sử trận đấu tiếp theo sẽ được thay đổi giống như cách bạn có thể sử dụng .để lặp lại. Hoặc bỏ qua một vài trận đấu thông qua nvà sau đó sử dụng ..

Vimcasts có một tình tiết hay về vấn đề này: Hoạt động trên các trận đấu tìm kiếm bằng gn

Để được trợ giúp thêm xem:

:h gn

Đây chắc chắn là cách để đi khi bạn có các chuỗi thay thế khác nhau mà bạn cần sử dụng ở những nơi khác nhau. Tôi không chắc về các sắc thái của chế độ hình ảnh dường như được viện dẫn gn, vì vậy đây là một phương pháp tương tự mà tôi vừa khám phá:c//e<CR>FooBar<Esc>//<CR>
Jeff

Có cách nào để thay đổi tất cả các lựa chọn / trận đấu cùng một lúc không? Về cơ bản, để tái cấu trúc?
Lão máu

@Geremia, vâng, :%s/oldtext/newstuff/gsẽ thay đổi tất cả các trận đấu của oldtextđể newstuff.
zundarz

@zundarz Tôi không muốn thực hiện regrec, nhưng chỉ thay thế tên biến. Thay vì đánh .nhiều lần, tôi có thể sử dụng :%norm .( nguồn ).
Geremia

7

Nếu bạn đã tìm kiếm một từ với /wordhoặc ?word.

Bạn có thể sử dụng :%s//newword/gcđể thay thế từ bạn đã tìm kiếm trước đó newwordbằng cách để s//..trống cụm từ tìm kiếm ( ).

Các clá cờ nói rằng mọi thay đổi phải được xác nhận, bằng cách nhấn ycho có hoặc nkhông có.

Hãy xem :help :s_flagsđể biết thêm thông tin về cờ xác nhận.


1
Tôi biết bạn nói nhìn vào sự giúp đỡ, nhưng bạn có thể cũng như rõ ràng đề cập đến bạn cũng có thể bấm l, aq(hoặc <Esc>) cho nhiều cách khác nhau để kết thúc chu kỳ xác nhận.
Jeff

2

Phương pháp số 1

Bạn có thể tận dụng gngNánh xạ để thực hiện những gì bạn muốn. gnsẽ tìm kiếm về phía trước cho cụm từ tìm kiếm được sử dụng cuối cùng và trực quan chọn trận đấu. gNthực hiện chính xác điều tương tự, ngoại trừ nó tìm kiếm ngược. Khi kết hợp với một toán tử như c, toán tử sẽ được áp dụng cho khớp, Ví dụ: nếu chuỗi tìm kiếm cuối cùng của bạn là "foo" và bạn nhập cgn, nó sẽ tìm kiếm chuyển tiếp cho phiên bản tiếp theo của "foo", xóa nó và xóa nó đưa bạn vào chế độ chèn để nhập văn bản thay thế.

Để biết thêm về những điều này, xem :help gn:help gN.

Phương pháp # 2

Bạn có thể sử dụng :substitutelệnh với ccờ. Điều này sẽ yêu cầu bạn xác nhận từng sự thay thế. Ví dụ: giả sử bạn muốn thay thế foo bằng thanh trong toàn bộ tệp, nhưng muốn xác nhận từng thay thế:

:%s/foo/bar/gc

Để biết thêm về vấn đề này, xem các chủ đề giúp đỡ: :help :s_flags, :help cmdline-ranges, và :help :substitute.

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.