Wikia

Vim Tips Wiki

Changes: Using normal command in a script for searching

Edit

Back to page

(add category, remove review template (tip is pretty decent))
(Change <tt> to <code>, perhaps also minor tweak.)
Line 3: Line 3:
 
|previous=315
 
|previous=315
 
|next=317
 
|next=317
|created=August 19, 2002
+
|created=2002
 
|complexity=intermediate
 
|complexity=intermediate
 
|author=David Brown
 
|author=David Brown
Line 27: Line 27:
 
</pre>
 
</pre>
   
Rather than using literal ^M characters, you can use <tt>:execute</tt> to allow you to place the entire command a string, which lets you use <tt>"\<CR>"</tt> instead. The first example would thus become:
+
Rather than using literal ^M characters, you can use <code>:execute</code> to allow you to place the entire command a string, which lets you use <code>"\<CR>"</code> instead. The first example would thus become:
   
 
<pre>
 
<pre>

Revision as of 05:24, July 13, 2012

Tip 316 Printable Monobook Previous Next

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.

References

Comments

Around Wikia's network

Random Wiki