My .vimrc fileFri, Mar 4, 2011
Vim is a very flexible editor that can be customized to adjust to your editing style. One of the things you learn early on is to maintain a ~/.vimrc file to contain your favorite settings, key mappings and custom commands.
The .vimrc file is a vimscript file, and vimscript is a full programming language in itself. So your .vimrc file can contain variables, conditional code, function definitions etc, but when getting started you will mostly want to stick with enabling/disabling settings and mapping keys.
While I have only been working with Vim for a couple of weeks now, I am starting to settle on my favorite settings and key mappings. The more I work in Vim, the more these actions will start to become muscle memory and the less I will have to think about them (hopefully!), so I really want a consistent environment on all of the computers I use.
In order to keep my environment across computers I store my .vimrc file (along with many other linux . files) on a SVN repository. This means that I can checkout this SVN directory and symlink my ~/.vimrc to the svn version. An alternative option might be to use rsync, or a 3rd party application like dropbox.
So, 3 weeks in, here are some snippets from my current .vimrc file…
set nocompatible " dump the old fashioned vi support! set backspace=indent,eol,start " allow backspacing over everything in insert mode set backup " keep a backup file set backupdir=~/.backup " custom backup directory set history=100 " keep 100 lines of command line history set ruler " show the cursor position all the time set showcmd " display incomplete commands set mouse=a " enable the mouse set lazyredraw " don't update the display while executing macros set showmode " so you know what mode you are in set laststatus=2 " always put a status line in. set scrolloff=10 " start scrolling 10 lines from the top/bottom set ch=2 " set command line 2 lines high set nowrap " no line wrapping set shiftwidth=2 " round indent actions to multiple of 2 set softtabstop=2 " soft tabs = 2 spaces set tabstop=2 " tabs = 2 spaces set expandtab " expand tabs to spaces set incsearch " do incremental searching set hlsearch " highlight search terms set ignorecase " case insensitive search set gdefault " replace all instances on line when doing global search/replace set number " enable line numbers set showmatch " show matching parenthesis set hidden " allow hidden buffers with unsaved changes set whichwrap+=<,>,[,] " allow arrow keys to line wrap set wildmenu " enable enhanced command line completion set wildignore+=*.pui,*.prj " ignore these when completing file or directory names set ttyfast " faster terminal updates set virtualedit+=block " allow virtual-block select to go past end of lines syntax on " enable syntax highlighting filetype plugin indent on " enable file type detection
I like to be able to quick edit my .vimrc file and my .bashrc file. I also have a couple of project specific vimscripts that I only want to load/edit when working on that project…
" Easy edit/open commands " ======================= command EditVim :edit ~/.vimrc command EditBash :edit ~/.bashrc command EditCI :edit ~/.vim/scripts/ci command EditLP :edit ~/.vim/scripts/lp command SourceCI :source ~/.vim/scripts/ci command SourceLP :source ~/.vim/scripts/lp
And here are some of my current key mappings…
" My favorite mappings " ==================== map <C-a> :Ack<Space> map <C-f> :NERDTreeToggle<CR> map <C-t> :CommandT<CR> map <C-b> :BufExplorer<CR> map <C-o> :TlistToggle<CR> map <F11> :ZoomWin<CR> map <F12> :noh<CR>
When putting text, I nearly always want to put the text before the cursor, rather than after it, so make that the default…
" switch p and P " ============== noremap p P noremap P p noremap o O noremap O o
I really, really like split windows (on large monitors) so I use | and - to vsplit and split. I also map
<Tab> to switch
<Shift-Tab> to switch the other direction and
<C-c> to close window…
" WINDOW MANAGEMENT " ================ map <Bar> <C-W>v<C-W><Right> map - <C-W>s<C-W><Down> map <Tab> <C-W>w map <Esc>[Z <C-W>W map <C-c> <C-W>c
I have a habit of saving often, I rely on version control (SVN) for reverting back if I make mistakes. So I want quick access
to save all buffers and also quick access to quit. My process generally is
<C-s><C-q> to save (all) and quit.
" QUICK SAVE " ========== noremap <C-s> :wa<CR> inoremap <C-s> <Esc>:wa<CR> noremap <C-q> :SaveSession<CR>:qa<CR> inoremap <C-q> <Esc>:SaveSession<CR>:qa<CR>
I also have a habit of starting my edits with a hit of the space or del key, so make these switch into insert mode…
" QUICK ENTRY INTO INSERT MODE " ============================ nnoremap <Space> i<Space> nnoremap <Del> i<Del>
… and that gets me started. I have some more advanced settings as well, and some plugin specific customizations, and I am sure that this list will continue to grow as I continue to learn and customize how I use Vim, but that is a good start.
Don’t forget to look for more inspiration from other vim users