Huayi Wei
Huayi Wei

Reputation: 849

How to execute a normal mode command in a vim function?

I am writing a vim function to insert some text in a c++ file, please see the following function:

function! InsertDebugInfo()                                                                      
     let i = line('.')                                                               
     call append(i+1, '#ifdef DEBUG')                                                
     call append(i+2, 'std::cout << ""  << std::endl;')                              
     call append(i+3, '#endif')                                                      
     call append(i+4, '')                                                            
     call cursor(i+3, 0)                                                             
endfunction    

In normal mode, I use == to re-indent one code line. My question is how to call == in the above function. Furthermore, how to execute the command such as 2f" which move the cursor to the second ".

Upvotes: 8

Views: 5372

Answers (2)

imbichie
imbichie

Reputation: 1606

Try this in your function:

execute 'normal 2f"'

Upvotes: 3

sudo bangbang
sudo bangbang

Reputation: 28169

To indent, you can just use

normal ==

To find also you can use

normal 2f"

or even shorter

norm <whatever you do in normal mode>

Now you might be getting what I'm trying to say.
If not, read documentation :h normal.

Upvotes: 12

Related Questions