Vim Tips Wiki

Write your own Vim function

1,624pages on
this wiki
Add New Page
Talk0 Share
Tip 32 Printable Monobook Previous Next

created 2001 · complexity advanced · author slimzhao · version 5.7

Here are some quick rules for writing Vim script, compared with the C language and the bash shell.

A function name must start with an uppercase letterEdit
hex2dec is invalid
Hex2dec is valid

C and bash allow both lowercase and uppercase.

However, Vim 7 :help autoload plugins allow an exception: they authorize lowercase functions like my#library#foo(), my#library#_internal(), etc.

How to reference function parametersEdit
fu! Hex2dec(var1, var2)
  let str=a:var1
  let str2=a:var2

You must prefix a parameter name with "a:" (argument).

A function cannot change a parameter (let a:var1=1 is invalid).

In C, "a:" is not used, and a parameter is writable.

See :help a:1

How to implement a variable number of parametersEdit
fu! Hex2dec(fixedparam, ...)
  • a:0 is the number of extra parameters "..." used to call the function.
  • a:1 is the first extra parameter.

For example:

:call Hex2dec("asdf", 4,5,6)

gives a:0 = 3, a:1 = 4, a:2 = 5, a:3 = 6.

See :help a:0 and also :help a:000

How to call a variadic function from another variadic functionEdit

Since Vim 7, iIt's possible thanks to :help function() and :help :call:

function! Hex2DecWrapper(...)
  let params = ['asdf'] + a:000
  :call call (function('Hex2Dec'), params)
Where is the vim-library?Edit

Vim has its own function library, see :help functions

Can I use the += or ++ operators?Edit
  • += exists in Vim since version 7.0
  • ++ does not
How to use a variableEdit
let var1=value
let var2=var1

Same as C, except you must use the let keyword.

See :help :let, and :help expression

Can any ex-mode command be used in a function?Edit

Yes — each line can be an ex command.

Can a function call itself (recurse)?Edit

Yes — but be careful to avoid an infinite loop.

Can a function call another function?Edit

Yes — just like C.

Calling a function that returns nothing requires to call this function with :help :call. When a function returns something, the result can be used as any :help expression or ignored via :help :call.

Must I compile the function?Edit

No, you needn't and you can't.

In Vim, enter the following command to source your script:

:so filename_containing_script

Now you can call the function.

If wanted, the ':so' (source) statement can be in your vimrc file.

Does Vim have integer or float or other data types?Edit

No. Like Perl, the type of a Vim variable is determined by its context.

let a=1
let a=a."asdf"
echo a    (displays '1asdf')
let a=1
let a=a+2
echo a    (displays '3')
Must I append a ';' to every statement?Edit

No, never do that.

If you want to combine several statements in a single line, use '|'.

';' is required in C, and optional in bash for each statement in a line.


See also


Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Also on Fandom

Random Wiki