" URL: http://vim.wikia.com/wiki/Example_vimrc " Authors: http://vim.wikia.com/wiki/Vim_on_Freenode " Description: A minimal, but feature rich, example .vimrc. If you are a " newbie, basing your first .vimrc on this file is a good choice. " If you're a more advanced user, building your own .vimrc based " on this file is still a good idea. "------------------------------------------------------------ " Features {{{1 " " These options and commands enable some very useful features in Vim, that " no user should have to live without. " Set 'nocompatible' to ward off unexpected things that your distro might " have made, as well as sanely reset options when re-sourcing .vimrc set nocompatible " Attempt to determine the type of a file based on its name and possibly its " contents. Use this to allow intelligent auto-indenting for each filetype, " and for plugins that are filetype specific. filetype indent plugin on " Enable syntax highlighting syntax on "------------------------------------------------------------ " Must have options {{{1 " " These are highly recommended options. " Vim with default settings does not allow easy switching between multiple files " in the same editor window. Users can use multiple split windows or multiple " tab pages to edit multiple files, but it is still best to enable an option to " allow easier switching between files. " " One such option is the 'hidden' option, which allows you to re-use the same " window and switch from an unsaved buffer without saving it first. Also allows " you to keep an undo history for multiple files when re-using the same window " in this way. Note that using persistent undo also lets you undo in multiple " files even in the same window, but is less efficient and is actually designed " for keeping undo history after closing Vim entirely. Vim will complain if you " try to quit without saving, and swap files will keep you safe if your computer " crashes. set hidden " Note that not everyone likes working this way (with the hidden option). " Alternatives include using tabs or split windows instead of re-using the same " window as mentioned above, and/or either of the following options: " set confirm " set autowriteall " Better command-line completion set wildmenu " Show partial commands in the last line of the screen set showcmd " Highlight searches (use to temporarily turn off highlighting; see the " mapping of below) set hlsearch " Modelines have historically been a source of security vulnerabilities. As " such, it may be a good idea to disable them and use the securemodelines " script, . " set nomodeline "------------------------------------------------------------ " Usability options {{{1 " " These are options that users frequently set in their .vimrc. Some of them " change Vim's behaviour in ways which deviate from the true Vi way, but " which are considered to add usability. Which, if any, of these options to " use is very much a personal preference, but they are harmless. " Use case insensitive search, except when using capital letters set ignorecase set smartcase " Allow backspacing over autoindent, line breaks and start of insert action set backspace=indent,eol,start " When opening a new line and no filetype-specific indenting is enabled, keep " the same indent as the line you're currently on. Useful for READMEs, etc. set autoindent " Stop certain movements from always going to the first character of a line. " While this behaviour deviates from that of Vi, it does what most users " coming from other editors would expect. set nostartofline " Display the cursor position on the last line of the screen or in the status " line of a window set ruler " Always display the status line, even if only one window is displayed set laststatus=2 " Always display the tabline, even if there is only one tab set showtabline=2 " Hide the default mode text (e.g. -- INSERT -- below the statusline) set noshowmode " Instead of failing a command because of unsaved changes, instead raise a " dialogue asking if you wish to save changed files. set confirm " Use visual bell instead of beeping when doing something wrong set visualbell " And reset the terminal code for the visual bell. If visualbell is set, and " this line is also included, vim will neither flash nor beep. If visualbell " is unset, this does nothing. set t_vb= " Enable use of the mouse for all modes set mouse=a " Set the command window height to 2 lines, to avoid many cases of having to " "press to continue" set cmdheight=2 " Display line numbers on the left set number " Quickly time out on keycodes, but never time out on mappings set notimeout ttimeout ttimeoutlen=200 " Use to toggle between 'paste' and 'nopaste' set pastetoggle= "------------------------------------------------------------ " Indentation options {{{1 " " Indentation settings according to personal preference. " Indentation settings for using 4 spaces instead of tabs. " Do not change 'tabstop' from its default value of 8 with this setup. set shiftwidth=4 set softtabstop=4 set expandtab " Indentation settings for using hard tabs for indent. Display tabs as " two characters wide. "set shiftwidth=2 set tabstop=4 " Force the cursor onto a new line after 80 characters set textwidth=80 " However, in Git commit messages, let’s make it 72 characters autocmd FileType gitcommit set textwidth=72 " Colour the 81st (or 73rd) column so that we don’t type over our limit set colorcolumn=+1 "------------------------------------------------------------ " Mappings {{{1 " " Useful mappings " Map Y to act like D and C, i.e. to yank until EOL, rather than act as yy, " which is the default map Y y$ " Map (redraw screen) to also turn off search highlighting until the " next search nnoremap :nohl "------------------------------------------------------------ " Add the powerline statusbar " Linux "if (filereadable("/usr/lib/python3.6/site-packages/powerline/bindings/vim/__init__.py")) "" set rtp+=/usr/lib/python3.6/site-packages/powerline/bindings/vim "endif " macOS "if (filereadable("/usr/local/lib/python3.6/site-packages/powerline/bindings/vim/__init__.py")) "" set rtp+=/usr/local/lib/python3.6/site-packages/powerline/bindings/vim "endif " JMB server "if (filereadable("/home/jonny/.local/lib/python3.5/site-packages/powerline/bindings/vim/__init__.py")) "" set rtp+=/home/jonny/.local/lib/python3.5/site-packages/powerline/bindings/vim "endif "let g:powerline_pycmd = "py3" "------------------------------------------------------------ " Personal settings " Pathogen for plugins execute pathogen#infect() execute pathogen#helptags() " Colour schemes "set background=dark "let g:solarized_termtrans=1 "let g:solarized_termcolors=256 "let g:solarized_contrast="high" "let g:solarized_visibilty="high" colorscheme gruvbox " syntastic settings from the readme set statusline+=%#warningmsg# set statusline+=%{SyntasticStatuslineFlag()} set statusline+=%* let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 1 let g:syntastic_check_on_wq = 0 " php syntastic options " order of checking let g:syntastic_php_checkers = ['php'] " Let’s use Vim properly, no arrow keys nnoremap :echomsg "use k" nnoremap :echomsg "use j" nnoremap :echomsg "use j" nnoremap :echomsg "use l" " And spell-checking autocmd FileType gitcommit setlocal spell set complete+=kspell " Keymap to open NERDtree map :NERDTreeToggle " Autoclose when NERDtree is the last buffer autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif " Allow the use of `vim` to open a “project” autocmd StdinReadPre * let s:std_in=1 autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif " NERDtree file highlighting function! NERDTreeHighlightFile(extension, fg, bg, guifg, guibg) exec 'autocmd filetype nerdtree highlight ' . a:extension .' ctermbg='. a:bg .' ctermfg='. a:fg .' guibg='. a:guibg .' guifg='. a:guifg exec 'autocmd filetype nerdtree syn match ' . a:extension .' #^\s\+.*'. a:extension .'$#' endfunction call NERDTreeHighlightFile('jade', 'green', 'none', 'green', '#151515') call NERDTreeHighlightFile('ini', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('md', 'blue', 'none', '#3366FF', '#151515') call NERDTreeHighlightFile('yml', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('config', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('conf', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('json', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('html', 'yellow', 'none', 'yellow', '#151515') call NERDTreeHighlightFile('styl', 'cyan', 'none', 'cyan', '#151515') call NERDTreeHighlightFile('css', 'cyan', 'none', 'cyan', '#151515') call NERDTreeHighlightFile('coffee', 'Red', 'none', 'red', '#151515') call NERDTreeHighlightFile('js', 'Red', 'none', '#ffa500', '#151515') call NERDTreeHighlightFile('php', 'Magenta', 'none', '#ff00ff', '#151515')