Previous TipNext Tip

Tip: #141 - Add your function heading with a keystroke

Created: October 18, 2001 22:36 Complexity: basic Author: Mohit Kalra Version: 5.7 Karma: 84/32 Imported from: Tip#141

Below is a tip that the C/C++ Newbies may find interesting and handy to use. The following code will add a function heading and position your cursor just after Description so that one can document as one proceeds with code.

function FileHeading() 
 let s:line=line(".") 
 call setline(s:line,"/***************************************************") 
 call append(s:line,"* Description - ") 
 call append(s:line+1,"* Author - Mohit Kalra") 
 call append(s:line+2,"* Date - ".strftime("%b %d %Y")) 
 call append(s:line+3,"* *************************************************/") 
 unlet s:line 

imap <F4> <esc>mz:execute FileHeading()<RET>`zjA 

Where <esc> stands for ^V+ESC and <RET> for ^V+ENTER



What key has to be typed for this to be working. I am fairly new to this board.

imap <F4> mz:execute FileHeading()`zjA 

The last 3 chars (zjA) is it typo ? or I have to include in file? , November 6, 2002 11:39

to get this working type F4 in insert mode. the `zja is not a typo. Observe that :

  1. mz is actually marking the first line that is inserted becoz of this macro. That is, it remembers the position of /******
  2. `z actually takes the cursor to that marker.
  3. j will take you one line below that marked line.
  4. A will put you in Append mode at the end of the line where the cursor is.

Effectively, you have a cursor that is in insert mode and is positioned right after "Description" so that you can type it then and there itself.


mohit kalra , November 8, 2002 6:23

Very nice tip - it can be used generally everywhere you need some one-stroke-large-block-of-text-inserting. This includes all programming languages and much more.

I was wondering however if you can insert some block of text as a header for a newly created file? I am thinking about inserting a header like the one show in the tip every time I create a ".java" file.

Filip K. , November 4, 2003 14:44

"I was wondering however if you can insert some block of text as a header for a newly created file?"

Put this in your .vimrc file

:autocmd BufNewFile,BufRead *.java <vim command that you want run> 

I use it to read a stored program heading into my programs

:autocmd BufNewFile,BufRead *.C r ~/style/mainh 

D , February 18, 2004 21:52

Is there any way to take input from the keyboard when creating these headers?

I have one set up for functions and classes and it would be great if it asked me for the function name when creating it. , March 24, 2004 9:15

Not sure if this is of use to you and I apologise since it's not the nicest or most elegant way of doing things, but a way to get text you type automatically inserted into code is by using a combination of command and functions.

here's one I wrote for a friend whose messing around with c# and getting bored of writing!:-

### put the following in you vimrc 
command -nargs=+ CSprop :call Prop(<f-args>) 

## function to do the business! 
function Prop(return,property,name) 
 normal o<Esc> 
 let currline = line(".") 
 call setline(currline, "public " . a:return . " " . a:property) 
 normal o<Esc> 
 let currline = currline + 1 
 call setline(currline, "{") 
 normal o<Esc> 
 let currline = currline + 1 
 call setline(currline, "\tget { return this." . a:name . "; }") 
 normal o<Esc> 
 let currline = currline + 1 
 call setline(currline, "\tset { this." . a:name . " = value; }") 
 normal o<Esc> 
 let currline = currline + 1 
 call setline(currline, "}") 
endfunction now, with that loaded in when you type the following command in VIM

:CSprop returnval propval nameval 

the following text will be inserted in your script:-

public returnval propval 
 get { return this.nameval; } 
 set { this.nameval = value; } 

hope that helps :)

Andy , October 26, 2004 7:35

when i use command similar to the one below to add stored header to my new program file, it works. However every time i reopen the file, the header is getting added, which is not i want. What is going wrong here?

:autocmd BufNewFile,BufRead *.C r ~/style/mainh

haritha_gr--AT-- , January 27, 2005 12:05

Remove BufRead , March 29, 2005 17:11

Can someone please help me with the errors that I see with Mohit's function? I get the following error when I use the script as is -

  1. When I hit "F4" (one key) in insert mode I see the following line appear in the command mode -
:execute FileHeading()<RET>`zjA 
  1. Then the lines are added to the file but VIM complains that -
E121: Undefined variable: RET 
E15: Invalid Expression: FileHeading()<RET>`zjA 

TIA -sanjay , October 20, 2005 14:32

Instead of using <RET> use <CR>

-->imap <F4> <esc>mz:execute FileHeading()<CR>`zjA , November 12, 2005 6:38

I use this tip and it works fine. However, I have my .vimrc file saved and sourced when modified in an "au" command. I receive an error "E122", this function already exists. I'm new using Vim, and don't understand this error.


TonyB , January 29, 2006 8:13

It is very very use full to all. , March 25, 2006 1:34

Community content is available under CC-BY-SA unless otherwise noted.