This is my .vimrc, I find it benefitial to use this where I do development to normalise my editor across different operating systems, and to enable some useful untapped features to make Vim feel a bit less prehistoric.

First off, there are some code sections below which will use Vim plugins if it can detect them. I chose to use the Pathogen plugin system as it was the most Plug ’n’ Play when I first configured Vim.

I know Vim 8 has a native plugin system but that doesn’t help if you’re stuck with an older version of Vim.

The plugins configured below include Fugitive , which lists the current git repository’s state in the status bar & Syntastic which flags up syntax errors when saving.

" Heaton.dev .vimrc
" Maintainer:   Heaton.dev
" Version:      3.0

set encoding=utf-8

" Behaviour
filetype plugin on  " Load plugins with support for specific filetypes
syntax on           " Syntax highlighting
set tabstop=4 expandtab shiftwidth=4 softtabstop=4
set formatoptions-=cro  " Disable automatic line commenting
set linebreak       " Linebreak long lines
set smartcase       " Enable case-sensitivity if string has capitalisation
set ignorecase      " Ignore case when searching with lowercase
set incsearch       " Move cursor to matching strings as you type into search
"set hlsearch        " Highlight search results
set history=1000    " Remember more commands and search history
set tabpagemax=30   " Maximum number of tabs
set scrolloff=3     " Minimum visible lines around cursor
set number          " Show line numbers (set number)
"set number rnu      " Hybrid line numbers on (set number randomnumber)
set ruler           " Show column/row number in status bar
set autoread        " Reads file automatically if modified outside of buffer
set wildmenu        " Visual autocomplete
set wildignore=*.swp,*.pyc  " Ignore files
set shell=/usr/bin/env\ bash    " Shell for Vim terminal

" Delete comment character when joining commented lines
if v:version > 703 || v:version == 703 && has("patch541")
  set formatoptions+=j
endif

" Appearance
set t_Co=256        " Set terminal 256-bit color
colorscheme elflord    " Set theme (Built-in)
"set mouse=          " Disable mouse

" Pathogen pkg manager
if has('pathogen')
  execute pathogen#infect()
endif

"" Statusline
set laststatus=2      " Always show statusline

set statusline=%f     " Path to the file
set statusline+=\     " Separator
if has('fugitive')
  set statusline+=%{fugitive#statusline()}      " Git current branch
endif
set statusline+=%*    " Normal formatting
set statusline+=\     " Separator
if has('syntastic')
  set statusline+=%#warningmsg#                 " Syntastic warning
  set statusline+=%{SyntasticStatuslineFlag()}  " Syntastic warning
endif
set statusline+=%*    " Normal formatting

set statusline+=%=    " Switch to the right side

set statusline+=%#error#  " Formatting
set statusline+=%h    " Help file flag
set statusline+=%m    " Modified flag
set statusline+=%r    " Read only flag

set statusline+=%*    " Normal formatting
set statusline+=%c,   " Cursor column
set statusline+=%l/%L " Cursor line/Total lines
set statusline+=\ %P  " Percent through file

au BufRead,BufNewFile *.j2      set ft=jinja
au BufRead,BufNewFile *.conf    set ft=conf
" Spelling check language
"au BufRead,BufNewFile *.{txt,md,rst,tex} set spell spelllang=en_gb

" Plugins
"" Syntastic
if has('syntastic')
  let g:syntastic_quiet_messages = { "type": "style" }  " Disable style checkers
  let g:syntastic_check_on_open = 1
  let g:syntastic_auto_jump = 2   " Jump cursor to first error
  let g:syntastic_python_pylint_args = '-E'   " Only check for errors
  let g:syntastic_aggregate_errors = 1    " Run all checkers before showing results
endif

" Local additions
if !empty(glob("~/.vimrc.local"))
  source ~/.vimrc.local
endif