2011-01-25 25 views
38

Trong Vim, có cách nào để lặp lại lệnh cuối cùng bất kể đó là chỉnh sửa hay không, và không có tầm nhìn xa để ghi lại macro lần đầu tiên?Làm thế nào để lặp lại bất kỳ lệnh nào trong Vim, như "C-x z" trong các emacs?

Ví dụ: nói rằng tôi nhập :bn và muốn thực hiện lại (đó là tệp sai). Nhấn . rõ ràng là không làm điều đó. Hoặc có thể tôi đang làm gE và muốn lặp lại điều đó (với một phím tắt vì rõ ràng là gE là loại khó chịu để nhập).

Có thể có một số plugin? Tương tự như this question.

(Thậm chí mát sẽ được hồi tố ràng buộc một số lệnh để macro, vì vậy người ta có thể gõ [email protected] hay một cái gì đó để lặp lại 5 lệnh cuối cùng ...)

Trả lời

50

Để lặp lại một lệnh dòng lệnh, hãy thử @:, để lặp lại một lệnh bình thường/insert-mode, thử .,

Thêm bên dưới bản đồ để vimrc của bạn nếu bạn muốn tắt giống nhau: -

:noremap <C-P> @:<CR> - Đây sẽ vạch Ctrl + P để lệnh trước dòng lệnh. Bạn có thể ánh xạ bất kỳ combo nào khác.

+0

Vậy các lệnh chế độ thông thường như "gE" như thế nào? Có một lệnh ": norm" để thực hiện các lệnh chế độ bình thường từ dòng lệnh, nhưng nó không lặp lại ... – johv

+0

'gE' làm gì? tôi đã thử 'dw' để xóa một từ, và sau đó tôi nhấn' .' để xóa một từ khác – Ravikiran

+0

Đó là một lệnh chuyển động, "Backward to end of WORD", đảo ngược của E. – johv

12

:help repeating sẽ cung cấp các lệnh lặp lại điển hình (như., @ :, v.v.). Bạn có thể thử repeat.vim. Điều đó có thể giúp bạn gần gũi hơn với những gì bạn đang tìm kiếm.

+0

repeat.vim giải quyết vấn đề của tôi :) –

0

Bạn có thể lập bản đồ @: một số chìa khóa để thuận tiện hơn:

:map <F2> @: 

và sau đó nó dễ dàng hơn để sử dụng nó với lặp đi lặp lại.

9

Đối với lệnh chuyển động, không có cơ chế nào được tích hợp vào Vim. Các lệnh Tìm và Đến (f/F/t/T) có ;, để lặp lại và đảo ngược. Có một vài plugins mà mở rộng những cam kết ràng buộc để lặp lại các lệnh chuyển động khác:

http://www.vim.org/scripts/script.php?script_id=2174

http://www.vim.org/scripts/script.php?script_id=3665

Các muộn nên hỗ trợ lặp lại gE sử dụng ;

5

Bạn chỉ có thể sử dụng ""

Ví dụ: Bạn có "abc" ở 10 vị trí trong tệp của mình và bạn muốn thay thế bằng "def" ở 5 vị trí của nó.

Bước 1: Tìm sự xuất hiện đầu tiên của abc bằng cách gõ lệnh "/ abc"
Bước 2: Sau khi con trỏ đang "abc", Replace abc bằng lệnh "cw" đưa ra từ "abc"
Bước 3 : Nhập "def" làm thay thế và nhấn enter để chuyển đến chế độ lệnh
Bước 4: Để lặp lại thao tác này, chỉ cần gõ lệnh "n" để đến lần xuất hiện tiếp theo của abc và gõ lệnh ".". Lệnh này ghi nhớ rằng bạn đã thay thế "abc" bằng "def" lần cuối và sẽ thực hiện tương tự ở đây.

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