created 2002 · complexity intermediate · author David Brown · version 6.0
There are a number of ways you can search for a pattern in a script. The search function is the typical way to search for a pattern. But, it has limited options. In particular, there are no options to control the position of the cursor after it matches the pattern.
Instead you can use :normal command. The secret is to add a <CR> (^M) on the end of the command. For example, to search for "pattern" and move the cursor to the end of the matching pattern issue the command:
:normal /pattern/e+1^M
where ^M is a real carriage return. It can be entered with <c-v><c-m>.
Another use is when you want to enter a bunch of normal commands together. For example, if you were looking to find a '{' to highlight and delete a C block. The '{' may not be on the same line so you can't use the "f" normal command.
:normal V/{/^M%d
Rather than using literal ^M characters, you can use :execute
to allow you to place the entire command a string, which lets you use "\<CR>"
instead. The first example would thus become:
:execute "normal /pattern/e+1\<CR>"
A drawback to using the normal command is that if the pattern does not match then it is difficult to detect. Also, you can get in trouble with the wrapscan setting.