2010-07-13 11 views
19

In Vim möchte ich normalerweise einige Befehlsfolgen mehrmals wiederholen. Sprich: Ich will 5 Zeilen kommentieren, ich würde verwendenWie wiederhole ich bestimmte Aktionen auf Vim?

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

Gibt es eine Möglichkeit, den letzten „.j“ Teil mehrmals zu wiederholen?

+1

Sie meinen etwas wie '5',' j'? –

+0

Dies ist eine runde Antwort auf Ihre Bedürfnisse, wenn nicht die direkte Frage. Was Sie hier zu tun scheinen, ist, 5 Zeilen Code zu kommentieren. Wenn dies Ihre einzige Voraussetzung ist, sollten Sie das Add-on NERD Commenter verwenden. Mit diesem Addon können Sie '5 \ cc' eingeben, was die aktuelle Zeile und die folgenden vier Codezeilen kommentiert. '5 \ cs' würde das Gleiche tun, aber ohne' // 'Zeilenkommentare fügen Sie'/* 'und' */'hinzu, um Ihre Zeilen zu blockieren. Vielseitiger. – cartbeforehorse

Antwort

27

Eine Möglichkeit besteht darin, die Tastenfolge einem Makro zuzuweisen und dann das Makro einmal auszuführen, gefolgt vom Befehl @@ run-last-macro. Zum Beispiel:

[email protected]@@ 

Wenn Sie wissen, wie oft Sie das Makro wiederholen möchten, können Sie [email protected]@ oder was auch immer verwenden.

+0

Interessanterweise bekomme ich unterschiedliche Ergebnisse für '@@@@@@@@' und '4 @@' ... – Alex

+0

8 Jahre alte Antwort und das funktioniert immer noch. Ein Beweis für die Macht von Vim. –

3

Für Ihr spezielles Beispiel. Sie könnten auch einen Bereich .,.5s#^#//# (um dies zu tun und die nächsten 5 Zeilen) oder einen visuellen Block (hit v, dann wählen Sie den gewünschten Text), gefolgt von :%s#^#//#.

+0

Sie können auch ": s #^# // # 5" verwenden (die Zeilenanzahl ist am Ende). – Neil

2

Ein anderer Weg, es zu tun ist, Markierungen zu setzen und Substitutionen über diesen Bereich laufen:

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

In Bezug auf Ihrem spezielles Beispiel, ziehe ich mehrzeilige Einfügung mit visuellem Block-Modus (mit Ctrl-v zugegriffen wird) zu tun. Zum Beispiel, wenn ich die folgenden Zeilen:

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

ich oben ersten Zeichen in der oberen Zeile, Ctrl-v Hit gehen würde, um visuellen Block Modus zu gelangen, navigieren Sie zum letzten Zeile (vielleicht 3j mit nach unten zu bewegen, 3 Zeilen, vielleicht 4g gehen direkt an 4. Zeile, oder vielleicht einfach G das Ende) zu gehen, dann I// <esc> geben Sie die Kommentare auf allen Linien auf einmal einzufügen:

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

Außerdem gibt es ein sehr handliches Commenter/Un-Commenter-Plugin, das viele Sprachen unterstützt here. Es ist einfacher als Kommentare manuell einzufügen oder zu entfernen.

+0

Ich benutze dieses: http://vim.sourceforge.net/scripts/script.php?script_id=1173 Ziemlich nett. – ThePosey

+0

Hmm, diese 'Ctrl-V'-Methode funktioniert nicht für mich ... Fügt nur in der ersten Zeile ein. Vielleicht liegt es daran, dass ich immer noch auf vim 7.2 bin ... – weronika

+0

@weronika Bist du 'gvim'? – isomorphismes

13

Sie können visuell die Zeilen auswählen, die Sie wiederholen möchten, geben Sie :normal! . ein, um vim . auf jeder Zeile zu verwenden. Weil Sie mit einer visuellen Auswahl gestartet, es endet wie folgt aussehen:

:'<,'>normal! . 

jedoch, wenn Sie das Hinzufügen und Entfernen // Kommentare alot, könnten Sie die folgenden Mappings nützlich finden:

" 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 

Sie können 5K verwenden, um 5 Zeilen zu kommentieren, Sie können den visuellen Modus verwenden, um zuerst Ihre Zeilen auszuwählen, oder Sie können einfach hämmern K, bis Sie alles kommentiert haben, was Sie wollen.

Verwandte Themen