Latest revision as of 02:08, December 30, 2012

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.