No script-local scope for NextNonBlankLine().
The example does not work when used literally, since the
NextNonBlankLine() function is defined to be script-local, but is not
invoked as such (i.e. using the <SID> prefix).
As this is left to the reader as an exercise anyway, it should better be
removed here.
author |
Vincent Driessen <vincent@3rdcloud.com> |
date |
Mon, 04 Jun 2012 23:52:31 +0200 |
parents |
a2fb13918fc6 |
children |
0e78ce34b11d |
Execute Normal!
===============
Now that we've seen `execute` and `normal!` we can talk about a common Vimscript
idiom. Run the following command:
:::vim
:execute "normal! gg/foo\<cr>dd"
This will move to the top of the file, search for the first occurrence of "foo",
and delete the line that contains it.
Previously we tried to use `normal!` with a search command but couldn't enter
the return needed to actually perform the search. Combining `normal!` with
`execute` fixes that problem.
`execute` lets you build commands programmatically, so you can use Vim's normal
string escape sequences to generate the non-printing characters you need. Try
the following command:
:::vim
:execute "normal! mqA;\<esc>`q"
What does this do? Let's break it apart:
* `:execute "normal! ..."`: run the sequence of commands as if they were entered
in normal mode, ignoring all mappings, and replacing escape sequences with
their results.
* `mq`: store the current location in mark "q".
* `A`: move to the end of the current line and enter insert mode after the last
character.
* `;`: we're now in insert mode, so just put a literal semicolon in the file.
* `\<esc>`: this is a string escape sequence which resolves to a press of the
escape key, which takes us out of insert mode.
* ```q``: return to the exact location of mark "q".
It looks a bit scary but it's actually quite useful: it puts a semicolon at the
end of the current line while leaving your cursor in place. A mapping for this
could come in handy if you forget a semicolon when writing Javascript, C, or any
other language with semicolons as statement terminators.
Exercises
---------
Read `:help expr-quote` again (you've seen it before) to remind yourself how to
use string escapes to pass special characters to `normal!` with `execute`.
Put down this book for a while before you go on to the next chapter. Get
a sandwich or a cup of coffee, feed your pets if you have them, and relax for
a bit before continuing.