≡ Menu

Make Vim as Your Bash-IDE Using bash-support Plugin

Vim Bash IDE PluginThis post is written by SathiyaMoorthy.

This article is part of the ongoing Vi / Vim Tips and Tricks Series. As a Linux sysadmin or programmer, you may do following repetitive tasks while coding bash shell script:

  • Adding file header
  • Adding function/frame comment
  • Including default code snippet
  • Performing syntax check
  • Reading documentation about a function
  • Converting a code block to comment, and vice versa

The bash-Support Vim plugin offers easiest way to do all of the above, saving lot of time and keystrokes.

The plugin was written by Fritz Mehner, who explains the purpose of the plugin as: “Write and run BASH-scripts using menus and hotkeys.”

This article explains how to install the plugin in 3 easy steps and 8 powerful features of the plugin.

3 Steps to Install the bash-support plugin

Step 1: Download the bash-support plugin

Download the plugin from vim.org website.

$ cd /usr/src
$ wget -O bash-support.zip http://www.vim.org/scripts/download_script.php?src_id=9890

Step 2: Install the bash-support Vim Plugin

$ mkdir ~/.vim # if the directory does not exist already
$ cd ~/.vim
$ unzip /usr/src/bash-support.zip

Step 3: Enable the plugin in the ~/.vimrc

Add the following line to the ~/.vimrc to enable the plugin for Vim editor.

$ vim ~/.vimrc
filetype plugin on

8 Powerful Features of Bash Vim Plugin

Feature 1: Add Automatic Header to *.sh file

When you open a file with the extension .sh it opens the file with header as shown below. This will also place the cursor in the Description field in Insert mode.

#          FILE:  myscript.sh
#         USAGE:  ./myscript.sh
#       OPTIONS:  ---
#          BUGS:  ---
#         NOTES:  ---
#        AUTHOR:   (),
#       COMPANY:
#       VERSION:  1.0
#       CREATED:  02/14/09 15:42:08 IST
#      REVISION:  ---

To change the default value of the AUTHOR and COMPANY, add the following lines in ~/.vimrc

let g:BASH_AuthorName   = 'SathiyaMoorthy'
let g:BASH_Email        = 'subscribe@thegeekstuff.com'
let g:BASH_Company      = 'Open Source Corporation'

Now, when you create a new bash script file, it will show the modified values for AUTHOR and COMPANY as shown below.

#          FILE:  myscript.sh
#         USAGE:  ./myscript.sh
#       OPTIONS:  ---
#          BUGS:  ---
#         NOTES:  ---
#        AUTHOR:  SathiyaMoorthy (), subscribe@thegeekstuff.com
#       COMPANY:  Open Source Corporation
#       VERSION:  1.0
#       CREATED:  02/14/09 15:39:58 IST
#      REVISION:  ---

Note: To add custom fields to the header, modify the ~/.vim/perl-support/templates/bash-file-header file and add your own custom field.

Feature 2: Adding Bash Function Using \sfu

For writing a subroutine, type \sfu in normal mode, which will prompt for the function name (as shown in Fig1 below) and inserts the subroutine with default function content (as shown in Fig2 below).

Vim Bash Plugin - Insert Function Header

Fig 1: Type \sfu to add a bash function inside a shell script

Vim Bash Plugin - Bash function added

Fig 2: Bash function added automatically inside shell script

Feature 3: Insert a Function Header Using \cfu

For inserting a function header, type \cfu in normal mode, which shows comments as shown in Fig 3.

Vim Bash Plugin - Insert Function Header

Fig 3: Type \cfu to insert a function header inside a shell script

Feature 4: Add a Frame Comment Using \cfr

To add a frame comment, type \cfr in normal mode, which will give the following formatted comment as shown in Figure 4.

Vim Bash Plugin - Insert a Frame Comment

Fig 4: Type \cfr to insert a frame comment inside a shell script

Feature 5: Insert Bash Statements Inside Shell Script

Short cut keys to insert statements are:

  • \sc case in … esac
  • \sl elif then
  • \sf for in do done
  • \sfo for ((…)) do done
  • \si if then fi
  • \sie if then else fi
  • \ss select in do done
  • \st until do done
  • \sw while do done
  • \sfu function
  • \se echo ­e “\n”
  • \sp printf “\n”

Example: Insert the Case Statement inside a shell script automatically

\sc will insert the case statements and places the cursor next to the case statement in INSERT mode as shown in figure 5. Like this you can use all the mentioned short cut keystrokes to get the appropriate statement in the table 1.

Vim Bash Plugin - Insert Case Statement

Fig 5: Type \sc to insert case statement inside bash shell script

Feature 6: Insert Predefined code-snippet to the Bash Script Using \nr

Code snippets can be read / written by using \nr and \nw respectively. The plugin comes with few pre-defined code snippets that you can insert into your code. Following are the default code snippets that comes with the plugin.

$ ls -1 ~/.vim/bash-support/codesnippets/

To include the check-number-of-command-line-arguments code snippet, press \nr and you will be prompted for a file name. Give the file name as check-number-of-command-line-arguments and the following code will be automatically inserted to the shell-script.

#  Check number of command line arguments
if [ $# -lt 1 ]
echo -e "\n\tUsage:  ${0##/*/} File\n"
exit 1

Note: You can define your own code snippets and place it under ~/.vim/bash-support/codesnippets/. You can also build your own code snippets from the existing code – select the part of code need to be made as code snippet, press \nw, and give a file-name to it. From next time, type \nr and the file-name to get your custom code snippet.

Feature 7: Get Quick Help on the Bash Builtin Commands

When you need to read help page for the bash builtins use \hh when the cursor is in the word.

In the following example (Fig 6), the read bash builtin command is selected and \hh is typed, which displayed the quick-help on the read command. Use the same method to get quick-help on all bash builtin commands.

Vim Bash Plugin - Get Help about Bash Builtin

Fig 6: Type \hh to get help about the selected bash builtin command

Feature 8: Featured Commenting

Following commands will add the corresponding keyword comments. For example, type \ckb to add the BUG comment line inside shell-script.

  • \ckb Keyword BUG
  • \ckt Keyword TODO
  • \ckr Keyword Tricky
  • \ckw Keyword WARNING

Type \ckt to add a comment line with the keyword “# :TODO: mm/dd/yy:: “. This is basically a comment line that acts as a TODO, where you can type the items that you would like to get it done later.

Vim Bash Plugin - Add TODO inside shell script

Fig 7: Type \ckt to add TODO inside bash shell script

There are lot of powerful features in the bash-support Plugin. Read the documentation for more information. The documentation is located in the following location on your system.

Recommended Reading

Vim 101 Hacks, by Ramesh Natarajan. I’m a command-line junkie. So, naturally I’m a huge fan of Vi and Vim editors. Several years back, when I wrote lot of C code on Linux, I used to read all available Vim editor tips and tricks. Based on my Vim editor experience, I’ve written Vim 101 Hacks eBook that contains 101 practical examples on various advanced Vim features that will make you fast and productive in the Vim editor. Even if you’ve been using Vi and Vim Editors for several years and have not read this book, please do yourself a favor and read this book. You’ll be amazed with the capabilities of Vim editor.

Add your comment

If you enjoyed this article, you might also like..

  1. 50 Linux Sysadmin Tutorials
  2. 50 Most Frequently Used Linux Commands (With Examples)
  3. Top 25 Best Linux Performance Monitoring and Debugging Tools
  4. Mommy, I found it! – 15 Practical Linux Find Command Examples
  5. Linux 101 Hacks 2nd Edition eBook Linux 101 Hacks Book

Bash 101 Hacks Book Sed and Awk 101 Hacks Book Nagios Core 3 Book Vim 101 Hacks Book

Comments on this entry are closed.

  • BG February 20, 2009, 2:00 pm

    Great tutorial! Thanks a lot!
    I recommend http://www.vim.org/scripts/script.php?script_id=563 which allow keep a backup version in Revision Control System (RCS) whenever you save a file.

  • rakesh uv June 26, 2009, 11:10 pm

    good article, there is typo error here
    “Note: To add custom fields to the header, modify the ~/.vim/perl-support
    /templates/bash-file-header file and add your own custom field.”

    the path to the template file should contain bash-support instead of perl-support

  • Andrey December 1, 2009, 3:12 am

    Hi, I just tried the plugin. It looks not bad.

    I would recommend to add in the comment region (AUTHOR, script name, etc) the field
    with current directory name (where new script is) and host name (where new script is developed).

    Nest regards,

  • raju May 14, 2013, 10:03 am

    Is there something similar for tcsh?

  • Rui Ramos August 19, 2015, 7:30 am

    Please update!
    ” Set at least some personal details in the file
    (1.3) ‘$HOME/.vim/bash-support/templates/Templates’ ”
    That how its done this days;-)

  • David Kenner May 16, 2016, 1:04 pm

    I was not able to get it work after this point:
    To change the default value of the AUTHOR and COMPANY, add the following lines in ~/.vimrc
    Any ideas? I can’t get the menus to show either. Please help