Since my site is named after a Vim command. I figured that I should eventually write something talking about my favorite text editor, and how I like it configured. What follows is the explanation of my .vimrc, as well as a description of the plugins that I use. A lot of the credit for this configuration goes to Bart Trojanowski, who has an excellent Vim configuration. At the bottom I’ll have a link to download any of the files themselves if you so desire. I hope you find it useful (everything in fixed-width font is the actual text, everything else is comments about it):
My ~/.vimrc:
Modelines have been abused in the past, and while I haven’t heard of anything lately that would abuse them, it’s always better safe than sorry. This requires the securemodelines vim script
" --------------------------------------------------------------------------- " first the disabled features due to security concerns set modelines=0 " no modelines [http://www.guninski.com/vim1.html] let g:secure_modelines_verbose=0 " securemodelines vimscript let g:secure_modelines_modelines = 15 " 15 available modelines
Since these are all simple features, I won’t bother to explain them besides the inline comments:
" --------------------------------------------------------------------------- " operational settings syntax on set ruler " show the line number on the bar set more " use more prompt set autoread " watch for file changes set number " line numbers set hidden set noautowrite " don't automagically write on :next set lazyredraw " don't redraw when don't have to set showmode set showcmd set nocompatible " vim, not vi set autoindent smartindent " auto/smart indent set expandtab " expand tabs to spaces set smarttab " tab and backspace are smart set tabstop=6 " 6 spaces set shiftwidth=6 set scrolloff=5 " keep at least 5 lines above/below set sidescrolloff=5 " keep at least 5 lines left/right set backspace=indent,eol,start set showfulltag " show full completion tags set noerrorbells " no error bells please set linebreak set cmdheight=2 " command line two lines high set undolevels=1000 " 1000 undos set updatecount=100 " switch every 100 chars set complete=.,w,b,u,U,t,i,d " do lots of scanning on tab completion set ttyfast " we have a fast terminal filetype on " Enable filetype detection filetype indent on " Enable filetype-specific indenting filetype plugin on " Enable filetype-specific plugins compiler ruby " Enable compiler support for ruby set wildmode=longest:full set wildignore+=*.o,*~,.lo " ignore object files set wildmenu " menu has tab completion let maplocalleader=',' " all my macros start with , set foldmethod=syntax " fold on syntax automagically, always set foldcolumn=2 " 2 lines of column for fold showing, always set dictionary=/usr/share/dict/words " more words!
I do like candycode for my terminals (which tend to be black) and I like macvim for my GUI, so I change schemes depending on which I’m using.
if !has("gui_running") colorscheme candycode " yum candy end if has("gui_running") colorscheme macvim " macvim == win set guioptions-=T " no toolbar set cursorline " show the cursor line end
For the taglist plugin, I want it to appear on the right and to quick vim as soon as I close the last file I’m working on.
" Settings for taglist.vim let Tlist_Use_Right_Window=1 let Tlist_Auto_Open=0 let Tlist_Enable_Fold_Column=0 let Tlist_Compact_Format=0 let Tlist_WinWidth=28 let Tlist_Exit_OnlyWindow=1 let Tlist_File_Fold_Auto_Close = 1
Misc TOhtml settings
" Settings for :TOhtml let html_number_lines=1 let html_use_css=1 let use_xhtml=1
My status line is basically <filename> [<filetype>] [+] #<buffernum> <linenum>/<totallines>,<columnnum>
" --------------------------------------------------------------------------- " status line set laststatus=2 if has('statusline') function! SetStatusLineStyle() let &stl="%f %y " . \"%([%R%M]%)" . \"%#StatusLineNC#%{&ff=='unix'?'':&ff.'\ format'}%*" . \"%{'$'[!&list]}" . \"%{'~'[&pm=='']}" . \"%=" . \"#%n %l/%L,%c%V " . \"" endfunc call SetStatusLineStyle() if has('title') set titlestring=%t%(\ [%R%M]%) endif endif
More simple search options, see inline comments
" --------------------------------------------------------------------------- " searching set incsearch " incremental search set ignorecase " search ignoring case set hlsearch " highlight the search set showmatch " show matching bracket set diffopt=filler,iwhite " ignore all whitespace and sync
I *occasionally* use the mouse. If I have to.
" --------------------------------------------------------------------------- " mouse stuffs set mouse=a " mouse support in all modes set mousehide " hide the mouse when typing " this makes the mouse paste a block of text without formatting it " (good for code) map <MouseMiddle> <esc>"*p
I prefer not to litter my current directory with backup files, so I put them all in ~/.backup. I also save a lot of line positions in the viminfo file.
" --------------------------------------------------------------------------- " backup options set backup set backupdir=~/.backup set viminfo=%100,'100,/100,h,\"500,:100,n~/.viminfo set history=200 "set viminfo='100,f1
I use ,ss to toggle between spellcheck on and spellcheck off.
" --------------------------------------------------------------------------- " spelling... if v:version >= 700 setlocal spell spelllang=en nmap <LocalLeader>ss :set spell!<CR> endif
Here are all the keyboard shortcuts I use most often:
" --------------------------------------------------------------------------- " some useful mappings " Y yanks from cursor to $ map Y y$ " for yankring to work with previous mapping: function! YRRunAfterMaps() nnoremap Y :<C-U>YRYankCount 'y$'<CR> endfunction " toggle list mode nmap <LocalLeader>tl :set list!<cr> " toggle paste mode nmap <LocalLeader>pp :set paste!<cr> " change directory to that of current file nmap <LocalLeader>cd :cd%:p:h<cr> " change local directory to that of current file nmap <LocalLeader>lcd :lcd%:p:h<cr> " correct type-o's on exit nmap q: :q " save and build nmap <LocalLeader>wm :w<cr>:make<cr> " open all folds nmap <LocalLeader>fo :%foldopen!<cr> " close all folds nmap <LocalLeader>fc :%foldclose!<cr> " ,tt will toggle taglist on and off nmap <LocalLeader>tt :Tlist<cr> " ,nn will toggle NERDTree on and off nmap <LocalLeader>nn :NERDTreeToggle<cr> " When I'm pretty sure that the first suggestion is correct map <LocalLeader>r 1z=
I use this one quite often, as I often forget to do “sudo vim file” in the first case, now I don’t have to exit vim to write the file with sudo.
" If I forgot to sudo vim a file, do that with :w!! cmap w!! %!sudo tee > /dev/null % " ruby helpers iab rbang #!/usr/bin/env ruby iab idef def initialize
I think candycode looks good in all the color modes, but it’s still nice to set it up for different terms.
" --------------------------------------------------------------------------- " setup for the visual environment if $TERM =~ '^xterm' set t_Co=256 elseif $TERM =~ '^screen-bce' set t_Co=256 " just guessing elseif $TERM =~ '^rxvt' set t_Co=88 elseif $TERM =~ '^linux' set t_Co=8 else set t_Co=16 endif
Switch between tabs with ,tn and ,tp
" --------------------------------------------------------------------------- " tabs " (LocalLeader is ",") map <LocalLeader>tc :tabnew %<cr> " create a new tab map <LocalLeader>td :tabclose<cr> " close a tab map <LocalLeader>tn :tabnext<cr> " next tab map <LocalLeader>tp :tabprev<cr> " previous tab map <LocalLeader>tm :tabmove " move a tab to a new location
Load extensions we need and change some format options for markdown files.
" --------------------------------------------------------------------------- " auto load extensions for different file types if has('autocmd') filetype plugin indent on syntax on autocmd BufReadPost * \ if line("'\"") > 0| \ if line("'\"") <= line("$")| \ exe("norm '\"")| \ else| \ exe "norm $"| \ endif| \ endif " improve legibility au BufRead quickfix setlocal nobuflisted wrap number " improved formatting for markdown " http://plasticboy.com/markdown-vim-mode/ autocmd BufRead *.mkd set ai formatoptions=tcroqn2 comments=n:> autocmd BufRead ~/.blog/entries/* set ai formatoptions=tcroqn2 comments=n:> endif
- NERD Commenter – auto comment sections of code
- NERD Tree – display file tree for directories, like a project view
- Alternate – Alternate between implementation and header files
- Compview – Search for a word and display a window with results
- GetLatestVimScript – Get the latest version of scripts
- Matchit – Extended % matching
- Rails – Tons of RoR stuff
- Securemodelines – Secure modeline support
- Taglist – display a list of tags from the file
- VCScommand – help with files under revision control
- Vimball – install vimball plugins
- Yankring – have a ring of copy/paste buffers for history pasting
- C – A collection of helpful things for C (Although mine is heavily customized)
Well, hope someone out there finds these configuration files useful. I welcome any feedback
Soon to come: an explanation of the project that I’ve been working on that has taken me away from blogging for so long, an Intrusion Detection System based on Locality events.
Update 10/23/08: After some theme changes, updated screenshot (no NERDtree or taglist shown in the image):
Update 12/9/09: Been over a year, just for a teaser of what it looks like now:
bartman wrote:
That’s nice, man. I’ll have to borrow some of your stuff back
Link | September 15th, 2008 at 6:25 am
cypal wrote:
Only loosely related to this post’s topic, but if you are on the command line you can enter Vim by pressing ctrl+x+e (Bash). Quite useful as well at times.
http://codesnippets.joyent.com/posts/show/1625
And thanks for sharing your pro tips as well!
Link | September 16th, 2008 at 5:24 am
bumblehead wrote:
I was googling and looking for a vim+actionscript work-flow when I found this. No actionscripting, but the vim info is great!
In case anyone else was looking, here’s extra .vimrc actionscript stuff I found
“Preview in similarly-named swf in ‘browser
“command Preview :!firefox %
command Preview :!firefox “%:t:r”.swf
“:DebugF to launch flashplayer debug
command DebugF :! /home/duck/Software/flex_sdk_3/bin/fdb
“:Flash Helloworld.as compile the SWF with mxmlc
“/first/path/to/compiler /second/path/to/project/directory
command -nargs=1 Flash :! /home/duck/Software/flex_sdk_3/bin/mxmlc /home/duck/
Link | January 18th, 2009 at 10:31 pm
nXqd wrote:
I really enjoy your setup as a new Vim user
Link | February 21st, 2010 at 7:13 pm
Juan Colacelli wrote:
What configuration or plugin are you using at this image http://writequit.org/blog/wp-content/uploads/2008/10/vimnew.png to toggle the definitions/comments?
Link | April 18th, 2011 at 10:06 pm
Lee wrote:
I believe that is the SimpleFold plugin: http://eigenclass.org/hiki/simplefold
Link | April 19th, 2011 at 8:03 pm
Juan Colacelli wrote:
Thank’s for the answer!
I have read this 5 months later
Link | September 2nd, 2011 at 5:55 am
Dave wrote:
Hi Lee,
Thanks for sharing your vimrc, it’s a nice quick start for this part of vim.
autocmd wasn’t working (for me). It was reset by nocompatible. The helpfiles recomment to put nocompatible at the start of vimrc. That made it work.
Link | October 18th, 2011 at 1:21 am