How To: Send SQL commands to a database in VIM
A simple way of sending SQL to your database from everyone’s favourite editor Vim, without any plugins or macros.
Firstly we need to add a custom command to our .vimrc, open it up and add the following line, where:
- CommandName - The name of your command
- Username - The username for this database
- Password - The password for this database
- Database - The name of the database
:command -range=% CommandName :<line1>,<line2>w !mysql -uUsername -pPassword Database -t
For example:
:command -range=% SendDB :<line1>,<line2>w !mysql -utest -ptest test -t
That’s all the setting up we need. As you can see, after the exclamation mark is just the regular MySQL Command line tool and various options.
Fire up vim and start editing your sql.
# vim test.sql
As an example, here’s some simple SQL.
-- Drop existing table
DROP TABLE IF EXISTS `test`;
-- Create table
CREATE TABLE IF NOT EXISTS `test` (
`test_id` INT(11) NOT NULL auto_increment,
`name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`test_id`)
);
-- Add our data
INSERT INTO `test`(`name`) VALUES('dave');
-- Get it back out again
SELECT * FROM `test`;
If we’re happy with what we’ve written, while in command mode, type :SendDB, or whatever you called your command and hit enter. If it works, you’ll see something like this.
~/test.sql[+][sql] unix :SendDB +---------+------+ | test_id | name | +---------+------+ | 1 | dave | +---------+------+ Press ENTER or type command to continue
You can always add to the custom command, in particular piping the output to less can be effective for larger result sets.









May 6th, 2008 at 7:52 pm
Good to know. I’m working as a DBA and this might be useful to me. However, I noticed vim is not installed on the servers at work :( I’ll have keep doing it the old way…
May 7th, 2008 at 1:54 am
No vim?! Maybe try vi, though I’m not sure of if the commands will work with it.