Tip: #32 - Write your own Vim function
Created: March 7, 2001 6:01 Complexity: advanced Author: slimzhao--AT--21cn.com Version: 5.7 Karma: 169/58 Imported from: Tip#32
compare to C and shell(bash), herein is some vim specifics about vim-script:
1. A function name must be capitalized.
hex2dec is invalid
Hex2dec is valid
while in c and shell(bash), both lowercase and uppercase is allowed.
2. how to reference the parameters
fu! Hex2dec(var1, var2)
let str=a:var1
let str2=a:var2
you must prefix the parameter name with "a:", and a:var1 itself is read-only
in c, you reference the parameter directly and the parameter is writable.
3. how to implement variable parameter
fu! Hex2dec(fixpara, ...)
a:0 is the real number of the variable parameter when you invoke the function, with :Hex2dec("asdf", 4,5,6), a:0=3, and a:1=4 a:2=5 a:3=6
you can combine "a:" and the number to get the value
while i<a:0
exe "let num=a:".i
let i=i+1
endwhile
in c, the function get the real number by checking the additional parameter such as printf family, or by checking the special value such as NULL
4. where is the vim-library
yes, vim has its own function-library, just like *.a in c
:help functions
5. can I use += or ++ operator?
Nop, += and ++ (and -=, -- and so on)operator gone away in vim.
6. How can I assign a value to a variables and fetch its value?
let var_Name=value
let var1=var2
like it does in c, except you must use let keyword
7. Can I use any ex-mode command in a function?
As I know, yes, just use it directly, as if every line you type appears in the familar :
8. Can I call a function recurse?
Yes, but use it carefully to avoid infinte call.
9. Can I call another function in a function?
Course, like C does.
10. Must I compile the function?
No, you needn't and you can't, just :so script_name, after this you can call the function freely.
11. Is it has integer and char or float data type?
No, like perl, vim script justify the variable type depend upon the context
:let a=1
:let a=a."asdf"
:echo a
you'll get `1asdf'
:let a=1
:let a=a+2
:echo a
you'll get 3
But it differs from perl.
12. Must I append a `;' in every statement?
No, never do that.
; is required in C, and optional in shell for each statement in a alone line.
But is forbidden in vim.
if you want combine servals statement in one single line, use `
Comments
Additional clarification for #10, you do
- so filename_where_function_is_located
Not to be confused with the function name itself.
dp--AT--orion.spectral-sys.com , March 14, 2001 13:29