Outline.
    
        | author | Steve Losh <steve@stevelosh.com> | 
    
        | date | Sun, 13 Nov 2011 18:35:19 -0500 | 
    
        | parents | 274674dc2025 | 
    
        | children | e66e6a4e104d | 
Execute Normal!
===============
Now that we've seen `execute` and `normal!` we can talk about a common Vimscript
idiom.  Run the following command:
    :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 programatically, so you can use Vim's normal
string escape sequences to generate the non-printing characters you need.  Try
the following command:
    :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.