Lưu hành động cuối cùng (.) Trong một macro


9

Ca sử dụng

Tôi đang ở chế độ bình thường. Tôi đã không nghĩ rõ ràng về việc ghi một macro, nhưng tôi thực hiện một thay đổi lệnh duy nhất. Bây giờ tôi có thể lặp lại hành động này bằng cách sử dụng dấu chấm.

Bây giờ tôi nhận ra rằng đó là một hành động hữu ích để lưu trong macro để sử dụng sau hơn là gõ toàn bộ lệnh mỗi lần. Tôi có thể tham gia vào tất cả các thay đổi cần lệnh này ngay bây giờ bằng cách sử dụng dấu chấm hoặc tôi có thể tiếp tục chỉnh sửa và sử dụng lệnh này sau bằng cách lưu nó trong macro.

Cái sau là điều tôi muốn làm, nhưng cách dễ nhất tôi có thể nghĩ là không dễ dàng - hoàn tác thay đổi của tôi, bắt đầu ghi macro và gõ lại lệnh để thực hiện thay đổi bắt buộc và dừng ghi macro.

Những gì tôi đã thử cho đến nay:

Ghi dấu chấm trong macro không hoạt động vì nó ghi lại dấu chấm và không thay đổi dấu chấm nào thực hiện. (Ví dụ: giả sử lệnh được lưu trong dấu chấm là d5wNếu bạn bắt đầu ghi macro và thực hiện hành động thông qua. Hy vọng rằng nó sẽ xóa 5 từ mỗi khi bạn chạy macro, thì điều đó sẽ không xảy ra. macro sẽ thực hiện dấu chấm chứ không phải lệnh d5w. Điều này có nghĩa là nếu bạn thực hiện một số thay đổi khác sau khi ghi macro - hãy xóa 3 từ bằng cách sử dụng d3wvà đó là thay đổi cuối cùng bạn thực hiện, sau đó khi bạn chạy macro, nó sẽ xóa 3 từ chứ không phải 5, vì nó chỉ đang chạy .)


Tôi đang đấu tranh để hiểu cả những gì bạn muốn làm và tại sao bạn không làm bất cứ điều gì với macro.

1
@DrEval OP nhận ra sau khi thực hiện lệnh ở chế độ bình thường rằng họ nên lưu nó trong macro và không muốn phải gõ lại trong khi ghi macro.
Giàu có

Câu trả lời:


2

Vim không giữ lịch sử các lệnh chế độ thông thường của bạn. Nếu bạn muốn giữ một lịch sử của lịch sử chế độ thông thường của mình, bạn có thể sử dụng cách sau để lưu nó vào một tệp: https://vi.stackexchange.com/a/587/13848

Các lệnh chế độ bình thường thường ngắn, vì vậy mọi người chỉ cần gõ nó ở chế độ bình thường và không cố gắng tạo macro. Tuy nhiên, nếu bạn muốn tạo macro từ các lệnh chế độ thông thường, bạn có thể chuyển đổi nó thành Exlệnh chế độ và sau đó lưu nó vào macro như @wmmso đã chỉ ra. Bạn có thể làm điều này bằng cách sử dụng normlệnh. Vì vậy, nếu bạn muốn xóa 2 từ bắt đầu ở vị trí con trỏ hiện tại và sử dụng lệnh chế độ bình thường trong Exchế độ sử dụng :norm d2w. (Tham khảo: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , Thực thi lệnh bình thường trên phạm vi )

Tốt hơn hết là sử dụng Exlệnh chế độ nếu đó là một lệnh phức tạp, vì nó cho phép bạn gõ lệnh đầy đủ trong bộ đệm, đảm bảo rằng nó thực sự chính xác và cũng lưu nó trong lịch sử dòng lệnh.

Bây giờ bạn có lệnh chế độ bình thường trong chế độ ex, bạn cũng có thể duyệt lệnh như lịch sử bằng cách sử dụng q:, sau đó sao chép nó vào một thanh ghi bằng cách sử dụng "ay$, trong khi trên dòng chứa dòng lệnh bạn muốn lưu vào macro. Sau đó, khi bạn muốn chạy macro, bạn có thể thực thi nó bằng cách sử dụng@a


Làm thế nào bạn sẽ viết một lệnh chế độ bình thường trong dòng lệnh mặc dù? ví dụ d2w?
Peeyush Kushwaha

Đã thêm một số làm rõ trong câu trả lời .. Điều đó có giúp gì không?
alpha_989

0

sao chép nội dung của thanh ghi ":" (những gì bạn vừa làm) vào một thanh ghi khác, ví dụ: đăng ký a:

:let @a = @:

bạn có thể thực hiện lại bằng cách sử dụng

@a

Điều này không làm việc cho tôi trong vim 7.4. Có vẻ như thanh ghi :chứa lệnh được thực thi cuối cùng thông qua :command-name-goes-herethay vì lệnh chế độ thông thường, chẳng hạn nhưd2w
Peeyush Kushwaha

2
Giải pháp đó chỉ hoạt động cho các lệnh ex không phải lệnh chế độ bình thường. Tôi không biết về một thanh ghi giữ lệnh chế độ bình thường cuối cùng. Sẽ hữu ích
Steve
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.