FANDOM


Previous TipNext Tip

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

Created: October 18, 2001 22:36 Complexity: basic Author: Mohit Kalra kmohit--AT--in.ibm.com 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 

endfunction


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


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

Comments

Hi:

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?


indiaguru100--AT--yahoo.com , 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.

HTH

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

appstate.edu , 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.

stuart.vim--AT--smgsystems.co.uk , 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

...so 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

andysailing--AT--yahoo.com , 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 yahoo.com

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


Remove BufRead

r.connell--AT--unb.ca , 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

2. Then the lines are added to the file but VIM complains that - E121: Undefined variable: RET E15: Invalid Expression: FileHeading()<RET>`zjA

TIA -sanjay


fpgabuilder-vim--AT--yahoo.com , October 20, 2005 14:32


Instead of using <RET> user <CR>

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

Eco_15--AT--yahoo.com , November 12, 2005 6:38


Instead of using <RET> use <CR>

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

Eco_15--AT--yahoo.com , 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.

Thanks

TonyB


retiredff--AT--direcway.com , January 29, 2006 8:13


It is very very use full to all.

sabari.us--AT--gmail.com , March 25, 2006 1:34


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