How to add a command in vim editor?

90

19

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?

Abhijeet Rastogi

Posted 2010-01-09T13:26:49.693

Reputation: 2 801

Answers

109

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.

James Polley

Posted 2010-01-09T13:26:49.693

Reputation: 5 892

4if you are replacing an existing command, you need to use command!. – phyatt – 2017-01-12T20:00:53.290

14

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.

Jeremy L

Posted 2010-01-09T13:26:49.693

Reputation: 2 587

6

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 ~/legend_header.txt`

this text will be added

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

"The following command puts the contents of ~/legend_header.txt 
"under the cursor when the user types ":Legend" in normal mode.
command Legend :r ~/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 ~/legend_header.txt should be added where the cursor is.

Eric Leschinski

Posted 2010-01-09T13:26:49.693

Reputation: 5 303

0

I use this command in my .vimrc to compile and exec the c code:

:command Gcc !set $1 `echo "%" | sed 's/\.c//g'` ;gcc -o $1 "%" ; chmod o+x $1; $1

, but for your needs you could put:

:command Gdb !set $1 `echo "%" | sed 's/\.c//g'` ;gcc -o $1 "%" ; gdb $1

You can be sure the name of the exec file will be the source name without .c extension.

Juan Miguel AR

Posted 2010-01-09T13:26:49.693

Reputation: 1