Can vim markers work with the repeat key?
I regularly use the .
key to repeat my last vim command. I'm wondering if there's a way to use it with commands performed using markers. Here's a simple example:
- Mark a line of text using
m'a
- Move down a few lines, e.g.
5j
- Indent the lines using
>'a
-- indents 6 lines - Press
.
to repeat above command on the same 6 lines -- will only affect 1st line
Is there a way to get v开发者_如何学Cim to apply the same marker range of the previous command when using the .
command?
ps. I know the above example would have been easier with 6>>
, which works with the .
, I'm just using it as an example. I often use markers for more complex/longer commands.
The problem is that the command you're repeating is >'a
, but because of the rule "After applying the operator the cursor is mostly left at the start of the text that was operated upon" (from :help operator
), >'a
leaves the cursor at mark a
if that was above your starting position. Then when you repeat >'a
you end up with a linewise motion from that line to itself, which only re-indents one line.
Since you're left at the beginning of the block of text, to affect the same block of text again you can use the ']
(linewise) or `]
(charwise) motions, which move to the end of the block of text just affected. So you can use >']
to indent the same block again, and since your cursor starts and ends at the same position this time, you can repeat it additional times with .
.
A simpler choice, though, would be to just use V5j>
instead of ma5j>'a
. V
starts visual mode (linewise) at your current position, 5j
moves down 5 lines, and then >
indents. And when you repeat using .
, the same visual selection still pertains, so you get the desired result whether you moved up or down.
精彩评论