" Use the Solarized Dark theme set background=dark colorscheme desert " let g:solarized_termtrans=1 " https://github.com/tpope/vim-pathogen execute pathogen#infect() " Make Vim more useful set nocompatible " Use the OS clipboard by default (on versions compiled with `+clipboard`) set clipboard=unnamed " Enhance command-line completion set wildmenu " Allow cursor keys in insert mode set esckeys " Allow backspace in insert mode set backspace=indent,eol,start " Optimize for fast terminal connections set ttyfast " Add the g flag to search/replace by default set gdefault " Use UTF-8 without BOM set encoding=utf-8 nobomb " Change mapleader let mapleader="," " Don’t add empty newlines at the end of files set binary set noeol " Centralize backups, swapfiles and undo history set backupdir=~/.vim/backups set directory=~/.vim/swaps if exists("&undodir") set undodir=~/.vim/undo endif " Don’t create backups when editing files in certain directories set backupskip=/tmp/*,/private/tmp/* " Respect modeline in files set modeline set modelines=4 " Enable per-directory .vimrc files and disable unsafe commands in them set exrc set secure " Enable line numbers set number " Enable syntax highlighting syntax on " Highlight current line set cursorline highlight CursorLine cterm=NONE ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE " Make tabs as wide as two spaces set tabstop=2 " Indents will have a width of 2 set shiftwidth=2 " Sets the number of columns for a TAB set softtabstop=2 " Expand TABs to spaces set expandtab set autoindent set smartindent " Show “invisible” characters set lcs=tab:▸\ ,trail:·,nbsp:_ set list " Highlight searches set hlsearch " Ignore case of searches set ignorecase " Highlight dynamically as pattern is typed set incsearch " Always show status line set laststatus=2 " Enable mouse in all modes set mouse=a " Disable error bells set noerrorbells " Don’t reset cursor to start of line when moving around. set nostartofline " Show the cursor position set ruler " Don’t show the intro message when starting Vim set shortmess=atI " Show the current mode set showmode " Show the filename in the window titlebar set title " Show the (partial) command as it’s being typed set showcmd " Use relative line numbers " if exists("&relativenumber") " set relativenumber " au BufReadPost * set relativenumber " endif " Start scrolling three lines before the horizontal window border set scrolloff=3 " Strip trailing whitespace (,ss) function! StripWhitespace() let save_cursor = getpos(".") let old_query = getreg('/') :%s/\s\+$//e call setpos('.', save_cursor) call setreg('/', old_query) endfunction noremap ss :call StripWhitespace() " Save a file as root (,W) noremap W :w !sudo tee % > /dev/null filetype plugin indent on " Automatic commands if has("autocmd") " Enable file type detection filetype on " Treat .json files as .js autocmd BufNewFile,BufRead *.json setfiletype json syntax=javascript " Treat .md files as Markdown autocmd BufNewFile,BufRead *.md setlocal filetype=markdown endif " https://flow.org/en/docs/editors/vim/ " Asynchronous Lint Engine (ALE) " Limit linters used for JavaScript. let g:ale_linters = { \ 'javascript': ['prettier', 'flow'], \ 'typescript': ['tslint', 'prettier'], \ 'css': [], \ 'html': [], \} " \ 'haskell': [] highlight clear ALEErrorSign " otherwise uses error bg color (typically red) highlight clear ALEWarningSign " otherwise uses error bg color (typically red) let g:ale_sign_error = 'X' " could use emoji let g:ale_sign_warning = '?' " could use emoji let g:ale_statusline_format = ['X %d', '? %d', ''] " %linter% is the name of the linter that provided the message " %s is the error or warning message let g:ale_echo_msg_format = '%linter% says %s' " Map keys to navigate between lines with errors and warnings. nnoremap an :ALENextWrap nnoremap ap :ALEPreviousWrap " NERDTree mapping https://github.com/scrooloose/nerdtree map :NERDTreeToggle