It’s time to blog about my .vimrc
— maybe someone finds some useful lines in it. It has grown over the years, aggregated from various sources all over the nets, and also includes some stuff I figured out myself.
The first few lines adjust some default settings like line numbering, etc.
set number set lbr set fdc=0 set vb set expandtab set shiftwidth=2 set tabstop=2 set linespace=0 set autoindent set smartindent set mouse=a set cursorline syntax on set showcmd set autowrite set noautochdir
The more interesting options are autowrite
and autochdir
. autowrite
automatically saves everyting when you do a :make
, and autochdir
automatically sets the working directory to the directory where the file in the current buffer is. I disabled this though, because I got used to manually changing directories again.
Yes, I use space indentation where I have the choice.
Next are some key mappings:
nmap <silent> <c-n> :NERDTreeToggle<CR> set hlsearch map <silent> <c-k> :nohlsearch<CR> map j gj map k gk
The first mapping is for the NERDTree-Plugin, a little file browser for vim.
The hlsearch
option activates the highlighting of all hits when you search for something with /
or do a search and replace. When I press Ctrl-K, the highlighting is disabled. It automatically re-activates the next time I search for something though.
I mapped j
and k
to gj
and gk
respectively, so the cursor always goes straight up or down when I press k or j, even when I’m going through long lines which wrap at the right end of the screen.
The next part is commented out, but I’m including it anyway because I still think it’s a useful feature:
"set list "set listchars=tab:»·,trail:· "hi SpecialKey ctermfg=cyan
This shows little arrows for tabs and dots at the end of lines with trailing spaces.
The next part makes the status line at the bottom of the windows a bit more populated:
set laststatus=2 "make a status line above the command line. otherwise this won't work set statusline= "clear statusline " set statusline+=%#comment# "make the statusline comment-color set statusline+=%-3.3n " buffer number set statusline+=%f " file name set statusline+=%h%m%r%w " flags set statusline+=[%{strlen(&ft)?&ft:'none'}, " filetype set statusline+=%{strlen(&fenc)?&fenc:&enc}, " encoding set statusline+=%{&fileformat}] " file format set statusline+=%= " right align set statusline+=%{synIDattr(synID(line('.'),col('.'),1),'name')} " highlight set statusline+=%b,0x%-8B " current char set statusline+=%-14.(%l,%c%V%) %<%P " offset
Here is my tabline:
function! MyTabLine() let s = '' let wn = '' let t = tabpagenr() let i = 1 while i <= tabpagenr('$') let buflist = tabpagebuflist(i) let winnr = tabpagewinnr(i) let s .= '%' . i . 'T' let s .= (i == t ? '%1*' : '%2*') let s .= ' ' let wn = tabpagewinnr(i,'$') let s .= (i== t ? '%#TabNumSel#' : '%#TabNum#') let s .= i if tabpagewinnr(i,'$') > 1 let s .= '.' let s .= (i== t ? '%#TabWinNumSel#' : '%#TabWinNum#') let s .= (tabpagewinnr(i,'$') > 1 ? wn : '') end for j in range(tabpagewinnr(i,'$')) " show a + if the tab contains modified buffers let bufmodified = getbufvar(buflist[j], "&mod") if bufmodified let s .= '+' endif endfor let s .= '%*' let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#') let bufnr = buflist[winnr - 1] let file = bufname(bufnr) let buftype = getbufvar(bufnr, 'buftype') if buftype == 'nofile' if file =~ '/.' let file = substitute(file, '.*/ze.', '', '') endif else if i != t let file = fnamemodify(file, ':p:~:.:gs?([^/])[^/]*/?1/?') " shorten path name to first letter of each directory else let file = fnamemodify(file, ':p:~:.') endif endif if file == '' let file = '[none]' endif let s .= file " let s .= (i == t ? '%m' : '') let i = i + 1 endwhile let s .= '%T%#TabLineFill#%=' return s endfunction set showtabline=2 " always show tab line set tabline=%!MyTabLine()
Most of the code for the tabline is from http://www.offensivethinking.org/data/dotfiles/vimrc.
It shows a nice tab line which shows tab numbers and the number of windows in a tab. I added the display of a path name which is shortened to the first letter of each directory when the tab is inactive. A also added the code that shows a little +
in front of a tab name for each window in the tab which contains a modified buffer.
Next is more commented out code.
"set colorcolumn=80,120 "hi colorcolumn ctermbg=NONE ctermfg=red cterm=bold guibg=NONE guifg=red gui=bold
This highlights the 80th and 120th column of each line.
Since I’m mostly using gvim, except for quickly editing some config files, I also have a .gvimrc
which sets guioptions=a
.
I’m synchronizing these files on my netbook and desktop PC via Unison. Because I want to use different fonts and colorschemes on each computer, my .gvimrc
ends with the line source ~/.gvimrc-local
, and the .gvimrc-local
, which is not synchronized, contains the font and colorscheme settings.
I hope my blog or your browser didn’t eat too many of the angle brackets and other special characters in the code fragments.