RangeMacro : Execute macro repeatedly until the end of a range is reached.
script karma |
Rating 0/0,
Downloaded by 1045 |
Comments, bugs, improvements
|
Vim wiki
|
created by |
Ingo Karkat |
|
script type |
utility |
|
description |
DESCRIPTION
Macros are a fantastic way to apply the same modification many many times.
Just record once and then repeat, repeat, repeat...
Though it's easy to repeat (@@, [count]@{0-9a-z".=*}) a macro, explicit
repeating becomes cumbersome when you're dealing with hundreds of repeats. You
can write a recursive macro (i.e. invoking the macro at the end), but that
will execute over the entire buffer, until the macro errors out on the border
of the buffer. Simple macros that mostly restrict themselves to a single line
can be repeated via :[range]normal @{0-9a-z".=*}, but that breaks when lines
are inserted or removed, or the macro jumps to other lines.
What's needed for extensive macro repetitions is to repeatedly execute the
macro over a range, and stop once the macro navigates out of the range.
This plugin provides a :RangeMacro command and mappings that execute a
recorded macro over a range, area of text covered by {motion}, or the current
seletion.
RELATED WORKS
- CommandWithMutableRange.vim (vimscript #3270) executes commands which may
add or remove lines for each line in the range.
USAGE
:[range]RangeMacro {0-9a-z".*+}
Position the cursor on the first column of the start
of [range] and execute the contents of register
{0-9a-z".*+} repeatedly until the cursor moves beyond
the lines covered by [range].
<Leader>@{0-9a-z".*+}{motion}
Repeatedly execute the contents of register
{0-9a-z".*+} until the cursor moves outside the text
covered by {motion}.
{Visual}<Leader>@{0-9a-z".*+}
Position the cursor on the first column of the
selection and execute the contents of register
{0-9a-z".*+} repeatedly until the cursor moves outside
the selection. All selection modes are supported:
characterwise, linewise and blockwise.
Note: The check whether the macro moved outside the range is only done _after_
each macro invocation. During macro evaluation, jumps outside the range can be
used and will not stop macro execution.
SUITABLE MACROS
To make a macro repeatable, the macro must move to the position where the next
macro call needs to take place, typically either as the first or last command
of the macro. The macro will always be executed from top to bottom of the
range, regardless of how {motion} or the selection was made.
So, for example, if the macro processes line(s) sequentially, append the "j"
command to move to the next line; if the buffer areas are located via
searching, you could use the "n" command to move to the next match. |
|
install details |
INSTALLATION
This script is packaged as a vimball. If you have the "gunzip" decompressor
in your PATH, simply edit the *.vba.gz package in Vim; otherwise, decompress
the archive first, e.g. using WinZip. Inside Vim, install by sourcing the
vimball or via the :UseVimball command.
vim RangeMacro.vba.gz
:so %
To uninstall, use the :RmVimball command.
DEPENDENCIES
- Requires Vim 7.0 or higher.
CONFIGURATION
For a permanent configuration, put the following commands into your vimrc:
As there must be mappings for all supported registers, the mapping cannot be
easily customized via the <Plug> mechanism. Instead, if you prefer a different
mapping, redefine the start of the normal and visual mode mappings (before
the plugin is sourced):
let g:RangeMacro_Mapping = '<Leader>@' |
|
script versions (upload new version)
Click on the package to download.
ip used for rating: 142.132.191.50
|