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