*sponsor.txt*   For Vim version 7.0.  Last change: 2006 Apr 30


		  VIM REFERENCE MANUAL    by Bram Moolenaar



SPONSOR VIM DEVELOPMENT						*sponsor*

Fixing bugs and adding new features takes a lot of time and effort.  To show
your appreciation for the work and motivate Bram and others to continue
working on Vim please send a donation.

Since Bram is back to a paid job the money will now be used to help children
in Uganda.  See |uganda|.  But at the same time donations increase Bram's
motivation to keep working on Vim!

For the most recent information about sponsoring look on the Vim web site:

	http://www.vim.org/sponsor/

More explanations can be found in the |sponsor-faq|.


REGISTERED VIM USER						*register*

You can become a registered Vim user by sending at least 10 euro.  This works
similar to sponsoring Vim, see |sponsor| above.  Registration was made
possible for the situation where your boss or bookkeeper may be willing to
register software, but does not like the terms "sponsoring" and "donation".

More explanations can be found in the |register-faq|.


VOTE FOR FEATURES					*vote-for-features*

To give registered Vim users and sponsors an advantage over lurkers they can
vote for the items Bram should work on.  How does this voting work?

1.  You send at least 10 euro.  See below for ways to transfer money
    |send-money|.

2.  You will be e-mailed a registration key.  Enter this key on your account
    page on the Vim website.  You can easily create an account if you don't
    have one yet.

3.  You can enter your votes on the voting page.  There is a link to that page
    on your account page after entering a registration key.  Your votes will
    be counted for two years.

4.  The voting results appear on the results page, which is visible for
    everybody:  http://www.vim.org/sponsor/vote_results.php

Additionally, once you have send 100 euro or more in total, your name appears
in the "Vim hall of honour":   http://www.vim.org/sponsor/hall_of_honour.php
But only if you enable this on your account page.


HOW TO SEND MONEY						*send-money*

Credit card	Through PayPal, see the PayPal site for information:
			https://www.paypal.com
		The e-mail address for sending sponsorship money is:
			donate@vim.org
		The e-mail address for Vim registration is:
			register@vim.org
		Using Euro is preferred, other currencies are also accepted.
		In Euro countries a bank transfer is preferred, this has lower
		costs.

Other methods	See |iccf-donations|.
		Include "Vim sponsor" or "Vim registration" in the comment of
		your money transfer.  Send me an e-mail that mentions the
		amount you transferred if you want to vote for features and
		show others you are a registered Vim user or sponsor.

Cash		Small amounts can be send with ordinary mail.  Put something
		around the money, so that it's not noticeable from the
		outside.  Mention your e-mail address if you want to vote for
		features and show others you are a registered Vim user or
		sponsor.

You can use this permanent address:
			Bram Moolenaar
			Molenstraat 2
			2161 HP Lisse
			The Netherlands



QUESTIONS AND ANSWERS				*sponsor-faq* *register-faq*

Why should I give money?

If you do not show your appreciation for Vim then Bram will be less motivated
to fix bugs and add new features.  He will do something else instead.


How much money should I send?

That is up to you.  The more you give, the more children will be helped.
An indication for individuals that use Vim at home: 10 Euro per year.  For
professional use: 30 Euro per year per person.  Send at least 10 euro to be
able to vote for features.


What do I get in return?

Each registered Vim user and sponsor who donates at least 10 euro will be able
to vote for new features.  These votes will give priority to the work on Vim.
The votes are valid for two years.  The more money you send the more your
votes count |votes-counted|.

If you send 100 Euro or more in total you will be mentioned on the "Vim hall
of honour" page on the Vim web site.  But only if you enable this on your
account page.  You can also select whether the amount will be visible.


How do I become a Vim sponsor or registered Vim user?

Send money, as explained above |send-money| and include your e-mail address.
When the money has been received you will receive a unique registration key.
This key can be used on the Vim website to activate voting on your Vim
account.  You will then get an extra page where you can vote for features and
choose whether others will be able to see that you donated.  There is a link
to this page on your "My Account" page.


What is the difference between sponsoring and registering?

It has a different name.  Use the term "registration" if your boss doesn't
like "sponsoring" or "donation".  The benefits are the same.


How can I send money?

See |send-money|.  Check the web site for the most recent information:
http://www.vim.org/sponsor/


Why don't you use the SourceForge donation system?

SourceForge takes 5% of the donations for themselves.  If you want to support
SourceForge you can send money to them directly.


I cannot afford to send money, may I still use Vim?

Yes.


I did not register Vim, can I use all available features?

Yes.


I noticed a bug, do I need to register before I can report it?

No, suggestions for improving Vim can always be given.  For improvements use
the developer |maillist|, for reporting bugs see |bugs|.


How are my votes counted?				*votes-counted*

You may vote when you send 10 euro or more.  You can enter up to ten votes.
You can select the same item several times to give it more points.  You can
also enter three counter votes, these count as negative points.

When you send 30 euro or more the points are doubled.  Above 100 euro they
count four times, above 300 euro they count six times, above 1000 euro ten
times.


Can I change my votes?

You can change your votes any time you like, up to two years after you
sent money.  The points will be counted right away.


Can I add an item to vote on?

Not directly.  You can suggest items to vote on to Bram.  He will consider
fitting your item into the list.


How about Charityware?

Currently the Vim donations go to |uganda| anyway.  Thus it doesn't matter if
you sponsor Vim or ICCF.  Except that Vim sponsoring will allow you to vote
for features.


I donated $$$, now please add feature XYZ!

There is no direct relation between your donation and the work Bram does.
Otherwise you would be paying for work and we would have to pay tax over the
donation.  If you want to hire Bram for specific work, contact him directly,
don't use the donation system.


Are the donations tax deductible?

That depends on your country.  The donations to help the children in |Uganda|
are tax deductible in Holland, Germany, Canada and in the USA.  See the ICCF
website http://iccf-holland.org/donate.html.  You must send an e-mail to Bram
to let him know that the donation is done because of the use of Vim.


Can you send me a bill?

No, because there is no relation between the money you send and the work that
is done.  But a receipt is possible.



 vim:tw=78:ts=8:ft=help:norl:
