2012-05-22 28 views
70

Có bất kỳ lệnh nào trong Vim/Vi để di chuyển trong một phân đoạn tìm kiếm đã chọn không?Có lệnh nào trong Vim/Vi để di chuyển con trỏ đến cuối điểm đánh dấu tìm kiếm không?

Ví dụ: nếu tôi tìm kiếm một từ, có bất kỳ lệnh nào để chuyển con trỏ đến cuối đoạn được đánh dấu không? Nói rằng tôi có một từ, "FishTaco" và tôi muốn tìm kiếm tất cả các phiên bản của "Fish" và chèn một cái gì đó sau đó. Tôi biết tôi có thể làm thay thế toàn cầu, nhưng nếu tôi muốn chỉ thực hiện thay đổi trong một vài trường hợp không tuần tự?

Tôi có thể thấy nơi thuận tiện để có thể chuyển con trỏ đến cuối đoạn được đánh dấu hiện tại để thực hiện một hành động.

+0

Đây không phải là một câu trả lời cho câu hỏi, nhưng để đạt được mục tiêu cuối cùng của bạn thay thế tất cả 'Fish' với 'FishTaco' , bạn có thể làm ':% s/Fish \ (Taco \) \ @!/& Taco /', sẽ tìm thấy tất cả 'Fish' chưa được theo sau bởi' Taco' và thay thế bằng 'FishTaco'. Kết hợp tìm kiếm tiêu cực tìm kiếm với một thay thế bao gồm cụm từ khớp được theo sau bởi 'Taco'. –

Trả lời

105

Bạn có thể làm điều đó với điều này:

/Fish/e

Các /e ở cuối vùng đất con trỏ của bạn ở phần cuối của khu vực tìm kiếm (thay vì ký tự đầu tiên theo mặc định

+22

Lưu ý rằng bạn có thể thêm * + n * hoặc * -n * để đặt con trỏ * n * ký tự trước hoặc sau khi kết thúc. –

+10

+1 Đã sử dụng vim trong 20 năm kể từ khi tôi 12 tuổi nhưng vẫn không biết điều này ... – Benj

+7

Đáng chú ý rằng sau khi bạn đã thực hiện tìm kiếm '/ Fish', bạn có thể nhảy đến cuối bằng' // e 'và từ Vim 7.4 bạn có thể sử dụng' gn' để làm nổi bật trực quan kết quả tìm thấy. – smathy

68

Nếu bạn. chỉ muốn đặt con trỏ của bạn sau ký tự cuối cùng của Cá thì bạn có thể sử dụng

/Fish/e+1 

sẽ đặt con trỏ của bạn đổi h. (Nếu không có +1 con trỏ sẽ kết thúc ở bên trái của ký tự cuối cùng.)

Nếu bạn đặc biệt quan tâm đến việc đặt con trỏ sau Cá, nhưng chỉ khi nó xuất hiện trong "FishTaco" thì bạn có thể thử một trong tùy chọn sau:

bạn có thể sử dụng

/FishTaco/s+4 

và con trỏ của bạn sẽ kết thúc giữa Fish và Taco. /s+4 đặt con trỏ 4 vị trí sau khi bắt đầu cụm từ tìm kiếm.

Bạn có thể sử dụng tương tự như vậy

/FishTaco/e-3 

mà sẽ đặt con trỏ 3 địa điểm bên trái của phía bên trái của nhân vật (kết thúc) cuối cùng.

Bạn cũng có thể sử dụng

/FishTaco/b+4 

/b+4 sẽ được coi như /s+4.

+10

Giải thích tuyệt vời, nhưng bây giờ tôi chỉ đói. – kenny

11

Khi bạn có lựa chọn trực quan, bạn có thể sử dụng o để chuyển vị trí con trỏ giữa đầu và cuối khối đã chọn. Khi lựa chọn là đường thẳng, nó sẽ chuyển đổi vị trí dòng, có nghĩa là con trỏ di chuyển đến dòng bắt đầu và kết thúc của lựa chọn nhưng không di chuyển đến ký tự bắt đầu hoặc kết thúc. Khi lựa chọn là nhân vật khôn ngoan thì phong trào cũng là nhân vật khôn ngoan.

Bạn cũng có thể sử dụng `<`> để chuyển con trỏ giữa phần đầu và cuối khối hình ảnh, tuy nhiên điều này ảnh hưởng đến lựa chọn, do đó nó được sử dụng để đặt lại hoặc điều chỉnh giới hạn lựa chọn.

Chỉnh sửa: Ah, nhưng đối với mục nổi bật tìm kiếm, điều này sẽ không hoạt động, bởi vì o sẽ bắt đầu chèn dòng.Tôi đoán đánh dấu tìm kiếm không giống với lựa chọn trực quan, xin lỗi :)

+0

Tôi cũng không biết điều đó. Điều này là rất tốt để sửa đổi sự khởi đầu của một lựa chọn mà không cần bắt đầu lại. (ví dụ: bạn đã bắt đầu chọn một từ quá sớm hoặc quá muộn) –

7

Phần "con trỏ ở cuối trận đấu" của câu hỏi của bạn đã được trả lời.

Bạn có thể làm :%s/Fish/FishTaco/c. Điều này giúp bạn có cơ hội xác nhận hoặc từ chối mọi thay thế và bỏ qua toàn bộ doanh nghiệp "con trỏ ở cuối trận đấu".

+0

Mẹo tuyệt vời. Nếu tôi nhập 'y', nó chỉ thực hiện thay thế lần đầu tiên. Làm thế nào để làm cho nó xác nhận cho mỗi người? –

+1

Nó đi đến trận đấu tiếp theo và chờ bạn gõ 'y' hoặc' n' và cứ thế cho đến khi không còn trận đấu nào. Để chấp nhận tất cả các thay thế tiếp theo, gõ 'a', để loại bỏ chúng, gõ' q'. – romainl

+0

Thực ra, tôi đã bỏ lỡ 'g' sau trận chung kết'/'nên nó không tiếp tục trong dòng của tôi. Cảm ơn vì tiền hỗ trợ. –

24

Nếu bạn đã tìm kiếm /Fish, bạn có thể nhanh chóng thay đổi tìm kiếm để kết thúc trận đấu qua //e, lặp lại tìm kiếm cuối cùng, nhưng nối thêm sửa đổi e đã được giải thích.

+1

// số e + chính xác là những gì tôi đang tìm kiếm! tuyệt vời. – arkod

8

/ long-regexp1 \zs long-regexp2 /.. con trỏ sẽ dừng lại ở \ ZS, xem: giúp \ ZS

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