2012-05-06 27 views
20

Trong Vim, khi tôi làm:Vim thay thế tất cả mà không cần con trỏ di chuyển

:%s/foo/bar/g 

Nó sẽ thay thế tất cả các lần xuất hiện của 'foo' với 'bar' trong toàn bộ tài liệu. Khi nó hoàn thành, con trỏ đã di chuyển đến vị trí cuối cùng mà 'foo' được thay bằng 'bar'.

Làm thế nào để bạn chạy :%s/foo/bar/g mà không cần con trỏ rời khỏi vị trí ban đầu trước khi phát hành lệnh này?

Có một số tùy chọn tôi có thể đặt trong .vimrc tệp không?

+6

Không chắc chắn về thực hiện nó mà không di chuyển con trỏ, nhưng bạn có thể di chuyển nó trở lại bằng cách nhấn một lần hai lần. –

Trả lời

23

Tôi chỉ cần nhập Ctrl + O sau khi thay thế để lấy lại vị trí trước đó.

+0

@lucapette Cảm ơn bạn đã chỉnh sửa định dạng. –

+0

@ib. không bao giờ mệt mỏi làm cho câu trả lời hoàn hảo hơn :) – sehe

+1

Có một ":" lệnh cho điều này? – Bunder

25

Khi lệnh :substitute chạy, trước khi thay thế thực tế được thực hiện, vị trí của con trỏ được lưu trữ trong danh sách nhảy. Để quay lại vị trí trước lần nhảy mới nhất, người dùng có thể sử dụng các lệnh `` hoặc '' Chế độ thông thường . Trong khi trước đó nhảy chính xác đến vị trí được lưu trữ, sau đó di chuyển con trỏ đến ký tự không trống đầu tiên trên dòng có vị trí .

Vì vậy, để nhanh chóng trở lại con trỏ trở lại vị trí ban đầu của nó, loại '' sau lệnh thay xong.

Để kết hợp thay thế và di chuyển con trỏ vào một lệnh, vấn đề

:%s/pat/str/g|norm!`` 

hoặc, nếu nó là đủ để nhảy không đến vị trí chính xác nhưng chỉ đến đường dây của nó,

:%s/pat/str/g|'' 

Như được hiển thị ở trên, '' có thể được sử dụng theo tùy chọn norm!'' trong lệnh thứ hai vì cú pháp phạm vi của các lệnh Ex (xem :help :range).

+0

Rất hay. Nhưng không thanh lịch. shoud sử dụng 'Ctrl-o'. – mattn

+0

@mattn: Theo tiêu chí nào sử dụng 'Ctrl' +' O' là thanh lịch, trong khi '\' \ '' thì không? Lệnh thứ hai không dài hơn lệnh cũ về các lần nhấn phím; cả hai đều dẫn đến cùng một chuyển động của con trỏ trong trường hợp này. Tại sao bạn thấy nhấn '\' \ '' (thay vì 'Ctrl' +' O') không thích hợp? –

+0

Câu trả lời đơn giản. dài hơn c-o. Và lệnh cập nhật lệnh jumplist của bạn. Nếu tôi sử dụng theo cách của bạn, tôi sẽ sử dụng g'. :) – mattn

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