2010-07-13 25 views
19

Trong Vim, tôi thường muốn lặp lại một số chuỗi lệnh một vài lần. Giả sử, tôi muốn nhận xét 5 dòng, tôi sẽ sử dụngLàm thế nào để lặp lại một số hành động nhất định trên Vim?

I//<Esc>j 
.j.j.j.j 

Có cách nào lặp lại phần ".j" cuối cùng không?

+1

Bạn có ý nghĩa giống như '5',' j'? –

+0

Đây là câu trả lời vòng quanh cho nhu cầu của bạn, nếu không phải là câu hỏi trực tiếp. Những gì bạn dường như đang làm ở đây là bình luận 5 dòng mã. Nếu đây là yêu cầu duy nhất của bạn, thì bạn nên sử dụng tiện ích bổ trợ NERD Commenter. Phần bổ sung này cho phép bạn gõ '5 \ cc', nó nhận xét dòng hiện tại và 4 dòng mã sau đây. '5 \ cs' sẽ làm tương tự, nhưng được thêm vào' // 'dòng chú thích nó sẽ thêm'/* 'và' */'để chặn-nhận xét các dòng của bạn. Linh hoạt hơn nhiều. – cartbeforehorse

Trả lời

27

Một cách để làm điều này là gán chuỗi khóa của bạn cho macro, sau đó chạy macro một lần theo sau là lệnh @@ chạy-cuối-macro. Ví dụ:

[email protected]@@ 

Nếu bạn biết số lần bạn muốn lặp lại macro, bạn có thể sử dụng [email protected]@ hoặc bất kỳ thứ gì.

+0

Điều thú vị là tôi nhận được các kết quả khác nhau cho '@@@@@@@@@' và '4 @@' ... – Alex

+0

Câu trả lời 8 tuổi và điều này vẫn hoạt động. Một minh chứng cho sức mạnh của vim. –

3

Ví dụ cụ thể của bạn. bạn cũng có thể sử dụng phạm vi .,.5s#^#//# (để thực hiện điều này và 5 dòng tiếp theo) hoặc khối hình ảnh (nhấn v, sau đó chọn văn bản bạn muốn), sau đó là :%s#^#//#.

+0

Bạn cũng có thể sử dụng ": s #^# // # 5" (số dòng là ở cuối). – Neil

2

Một cách khác để làm điều đó là để thiết lập nhãn hiệu và chạy thay thế trên phạm vi đó:

ma 
jjjj 
mb 
:'a,'bs,^,// ,
8

Về ví dụ cụ thể của bạn, tôi thích làm chèn nhiều dòng sử dụng chế độ khối thị giác (truy cập với Ctrl-v). Ví dụ, nếu tôi có các dòng sau:

This should be a comment. 
So should this. 
This is definitely a comment. 
Is this a comment? Yes. 

Tôi muốn đi đến nhân vật hàng đầu đầu tiên trong dòng trên cùng, nhấn Ctrl-v để vào chế độ khối hình ảnh, điều hướng đến dòng cuối cùng (có thể sử dụng để di chuyển xuống 3j 3 dòng, có thể sử dụng 4g để đi trực tiếp đến dòng thứ 4, hoặc có thể chỉ đơn giản là G đi cuối cùng), sau đó gõ I// <esc> để chèn các ý kiến ​​trên tất cả các dòng cùng một lúc:

// This should be a comment. 
// So should this. 
// This is definitely a comment. 
// Is this a comment? Yes. 

Ngoài ra, có một rất tiện dụng bình luận/un-commenter plugin hỗ trợ nhiều ngôn ngữ here. Việc này dễ dàng hơn chèn/xóa nhận xét theo cách thủ công.

+0

Tôi sử dụng cái này: http://vim.sourceforge.net/scripts/script.php?script_id=1173 Rất đẹp. – ThePosey

+0

Hmm, phương thức 'Ctrl-V' này không hoạt động đối với tôi ... Chỉ chèn vào dòng đầu tiên. Có lẽ đó là vì tôi vẫn còn trên vim 7.2 ... – weronika

+0

@weronika Bạn có 'gvim'? – isomorphismes

13

Bạn có thể chọn trực quan các dòng bạn muốn lặp lại trên, nhập :normal! . để sử dụng vim . trên mỗi dòng. Bởi vì bạn bắt đầu với một sự lựa chọn hình ảnh, nó sẽ trông như thế này:

:'<,'>normal! . 

Tuy nhiên, nếu bạn đang thêm và loại bỏ // bình luận rất nhiều, bạn có thể tìm ra các ánh xạ sau hữu ích:

" add // comment with K 
noremap K :s,^\(//\)\=,//,e <BAR> nohls<CR>j 
" remove // comment with CTRL+K 
noremap <C-K> :s,^//,,e <BAR> nohls<CR>j 

Bạn có thể sử dụng 5K để nhận xét 5 dòng, bạn có thể sử dụng chế độ trực quan để chọn dòng của mình trước tiên hoặc bạn có thể chỉ cần gõ K cho đến khi bạn đã nhận xét mọi thứ mình muốn.

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