Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

If suppose my source code file name is "foo.c". While editing and debugging i always execute this command:-

:!gcc -g foo.c -o foo;gdb foo

Can I add a custom command to Vim such that If i type ":debug" then the above command executes? How do I achieve that?

share|improve this question
up vote 55 down vote accepted

Yes. Vim documentation, section 40.2, Command-line mappings:

The Vim editor enables you to define your own commands. You execute these commands just like any other Command-line mode command. To define a command, use the ":command" command, as follows:

:command DeleteFirst 1delete

Now when you execute the command ":DeleteFirst" Vim executes ":1delete", which deletes the first line.

Note: User-defined commands must start with a capital letter. You cannot use ":X", ":Next" and ":Print". The underscore cannot be used! You can use digits, but this is discouraged.

Put that line in your ~/.vimrc (minus the inital : of course) and it will be defined every time you start vim. Also, use %:t to make reference to the file being edited (writing ! gcc %:t gets replaced by ! gcc foo.c).

If you'd only like it to be defined for the one file, or for certain files, you want an autocommand.

share|improve this answer

Vim already has support for Makefiles (:make). If you create one for your source, you can specify in it what you want done. Also, through ctags, Vim will be able to iterate through any errors found during compilation.

share|improve this answer

Add a user defined vi editor command:

This will make it so that when the user types :Legend in normal mode, a block of text is added under the cursor.

Step 1: Put this line into a file named /home/el/legend_header.txt:

this text will be added

Step 2: Put this command into your /home/el/.vimrc file (if the file doesn't exist, create it):

"The following command puts the contents of /home/el/legend_header.txt 
"under the cursor when the user types ":Legend" in normal mode.
command Legend :r /home/el/legend_header.txt

Step 3: Restart vi for the changes to take effect. You're done.

Test it

Step 1: Open a new file in vi. Be in the default "normal mode" in vi. Type :Legend

Step 2: The contents of /home/el/legend_header.txt should be added where the cursor is.

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .