Vim is pretty great, honestly. But since I started using vim after growing tired of nano, a lot in my .vimrc changed… To the point where colleagues who use vim on their machine rather use nano on mine before trying to wrap their head around my workflow. Every .vimrc is different and a lot of them exist out there, over twelve thousand repositories of shared vim configurations on GitHub alone and many more on private laptops and computers.
Generally creating a .vimrc works like creating a Makefile: Copy and paste from different sources with small changes until you have an approximation of the desired result and then need to decide whether you want to go the extra mile of dealing with your configurations’ and Vims’ quirks to get it working properly or you just leave it be. This is followed by years of incremental tweaking until you have a Vim environment which works perfectly but you don’t know why. At least that’s how I do it ¯\_(ツ)_/¯
So I took a dive into my own to see what kind of madness lurks down there…
set nocompatible set t_Co=16 set shiftwidth=4 set tabstop=4 set autoindent set smartindent filetype plugin on filetype indent on
So far, so good. Nothing special. Other than that indentation is set and overwritten three times, this has not lead to any problems (yet). The next lines are a bit more interesting:
call pathogen#infect() call pathogen#helptags() syntax on set background=dark " dark | light " colorscheme solarized
pathogen is a runtime manipulator which allows you to add additional plugins to Vim easier, in my case these are vim-solarized, a popular colourscheme, and vim-fugitive, a plugin that adds git commands within Vim.
#infect() loads these plugins and
#helptags() generates documentation. The following lines make use of solarized and add syntax highlighting.
set nu set listchars=eol:$,tab:>-,trail:.,extends:>,precedes:<,nbsp:_ set list let &colorcolumn="121" set splitbelow set splitright set viminfo='20,<1000
This controls numbering and control characters,
colorcolumn adds a ugly line over the 121’st char to keep up with coding styles.
split tells vim where to add new views when splitting (I rarely use these) and
viminfo sets the copy buffer to up to 1000 lines.
Now we get to the really interesting bits, key remaps!
"See :help map-commands "n = Normal only "v = Visual only "i = Insert only " = Normal+Insert+Select only " nore = disable recusiveness " map = Recursive map "split window switching nnoremap <C-J> <C-W><C-J> nnoremap <C-K> <C-W><C-K> nnoremap <C-L> <C-W><C-L> nnoremap <C-H> <C-W><C-H> "Make Up and Down Arrows move half a screen "instead of 1 line noremap <Up> <C-U> noremap <Down> <C-D> "BUFFERS Used to be F6,F7. Now used by flake set hidden noremap :bprevious noremap :bnext "Because buffers change Flake to use F3 instead of F7 "autocmd FileType python map :call Flake8() " DOES NOT WORK DAMN "Smart Home key noremap <expr> <Home> (col('.') == matchend(getline('.'), '^\s*')+1 ? '0' : '^') imap <Home> <C-o><Home>
Switching windows can be hassle without the first four remaps, but again, I rarely use split windows. Mapping the up and down arrows to jump half a screen instead just one line I added to stop myself from using them instead of
k, I have grown quite used to it, so it gets to stay ^_^
Buffer remaps are a must! Because I do use them a lot. There have been problems with Flake, a python lint tool, which I tried to avoid by remapping flakes key… Didn’t work out, so I got rid of Flake and call pylint when required instead.
The smart home key makes the
<home>-key jump to the first non-whitespace char in a line instead of the begining of the line, quite handy!
"Access commandwindow with ctrl+f or :cedit "For dorks map q: :q command Wsudo w !sudo tee % > /dev/null "Jump to next line > 120 chars command Warnl :/\%>120v./+ "For easy copy-paste command Cpm :set nonu paste cc= nolist "Catch regular caps failure command WQ :wq
These are just a few quality of life improvements, I tend to mistype
:Wsudo command lets me edit read-only files and
:Cpm is for easy mouse copy and paste.
:Warnl jumps to the next line with more than 120 chars, this again is to check for style problems.
Alright, that’s it. My current .vimrc. There were a few commented out lines I omitted because I have no clue what I was thinking at the time anymore, but I hope there were a few little bits someone else might find useful to feed their own beast of a .vimrc with.
Vim logo from vim.sexy
Shoggoth by twitter.com/nottsuo