Câu trả lời:
Các `.
lệnh sẽ đưa bạn đến sự thay đổi cuối cùng của bạn.
Dấu ấn `
đi đến một dấu và .
là dấu "đặc biệt" được tự động đặt ở vị trí thực hiện thay đổi cuối cùng. Xem :help `.
để biết thêm thông tin.
Ngoài ra còn ``
có nó sẽ đưa bạn trở lại nơi con trỏ đã ở trước khi bạn thực hiện bước nhảy cuối cùng. Xem : giúp đỡ``
để biết thêm thông tin.
Một dấu hiệu hữu ích khác là `^
; đây là vị trí mà con trỏ là lần cuối cùng khi chế độ chèn bị dừng. Xem :help `^
.
Xem :help mark-motions
để biết thêm thông tin chung về việc sử dụng nhãn hiệu (bao gồm một số nhãn hiệu "đặc biệt" khác được đặt tự động).
'
(dấu nháy đơn) thay vì `
(backtick).
Đây là một cách tiếp cận khác phù hợp với kịch bản đã cho của bạn và sẽ chuyển đến nơi bạn đã ở ngay trước dòng gg
(không đến dòng thay đổi cuối cùng).
Khi bạn nhấn gg
, vị trí con trỏ cũ của bạn sẽ được đẩy vào danh sách nhảy . Từ :help jumplist
:
Nhảy được ghi nhớ trong một danh sách nhảy. Với lệnh
CTRL-O
vàCTRL-I
bạn có thể đi đến các vị trí con trỏ trước khi nhảy cũ hơn và quay lại. Do đó bạn có thể di chuyển lên và xuống danh sách. Có một danh sách nhảy riêng cho mỗi cửa sổ. Số lượng mục nhập tối đa được cố định là 100.[Càng]
Nếu bạn sử dụng lệnh nhảy, số dòng hiện tại sẽ được chèn vào cuối danh sách nhảy. Nếu cùng một dòng đã có trong danh sách nhảy, nó sẽ bị xóa. Kết quả là khi lặp lại,
CTRL-O
bạn sẽ quay lại vị trí cũ chỉ một lần.
Điều này đòi hỏi bạn phải sử dụng Vim (không phải vi) với +jumplist
tính năng này. Nếu :echo has('jumplist')
in 1
, sau đó bạn có thể sử dụng này.
Để thêm vào câu trả lời của dnetserr và bình luận của Peter Rincker's, Vim duy trì một danh sách các thay đổi và có một số lệnh liên quan đến điều này.
:changes
sẽ liệt kê các thay đổi, cho bạn thấy chúng ở đâu và chúng là gì. Ví dụ:
change line col text
2 8 17 #include <stdio.h>
1 3 0 #include "stm32f407.auto.h"
>
Dòng với các >
chương trình mà bạn đang ở trong ngăn xếp thay đổi, giống như danh sách nhảy ( :jumps
) hoặc ngăn xếp thẻ ( :tags
). Cũng giống như danh sách nhảy và ngăn xếp thẻ, bạn có thể duyệt qua danh sách này.
Trong chế độ bình thường, các chuyển động là g;
đi đến một vị trí thay đổi trước đó và g,
đi đến vị trí tiếp theo. Bạn cũng có thể nhập số lượng thay đổi trước g;
hoặc g,
đến thay đổi đó từ danh sách. Ở trên, 2g;
sẽ đưa tôi đến nơi xảy ra thay đổi liên quan đến stdio.h.
Khi ở giữa ngăn xếp, các số từ :changes
cập nhật để hiển thị khoảng cách tương đối. Ví dụ:
change line col text
1 8 17 #include <stdio.h>
> 0 3 0 #include "stm32f407.auto.h"
1 10 4 other
Điều này cho thấy rằng tôi có thể quay lại một ( 1g;
hoặc chỉ g;
) hoặc chuyển tiếp một ( 1g,
hoặc chỉ g,
).
Điều này thật tuyệt nếu thay đổi bạn muốn thực sự xảy ra một vài sửa đổi trước đây
Nhược điểm của điều này là nó dường như không hoạt động như một chuyển động bình thường. Ví dụ: bạn không dg;
thể xóa từ con trỏ đến vị trí thay đổi trước đó, trong khi đó d'.
và d'^
thực hiện công việc như chuyển động.
Vì lệnh hoàn tác trong Vi sẽ hoạt động như một lần làm lại khi lệnh cuối cùng được hoàn tác, tôi đã sử dụng uu
như một phương tiện để quay lại nơi tôi chỉnh sửa lần cuối.
Nếu bạn đang chạy Vim với nocompatible
bộ (như hầu hết mọi người làm), bạn muốn sử dụng u
theo sau CTRL+R
để hoàn tác & làm lại. Nếu không uu
sẽ làm việc như trong Vi.
:set nocompatible
không được sử dụng.
vim
(with nocompatible
) thực hiện hai lần hoàn tác với uu
, nhưng tôi sử dụng u
và CTRL+r
cho cùng một hiệu ứng.
g;
vàg,
để di chuyển giữa các vị trí trong danh sách thay đổi. Xem:h g;
và:h g,