chapters/30.markdown @ a16e1fecfe07 default tip
Be clear
| author | Steve Losh <steve@stevelosh.com> |
|---|---|
| date | Mon, 27 Mar 2017 13:10:55 +0000 |
| parents | 8a753b8685fa |
| children | (none) |
Execute Normal! =============== Now that we've seen `execute` and `normal!` we can talk about a common Vimscript idiom in more detail. 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 string 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.