vim/vimrc
Jonathan Hodgson fa2e44a582 Adds deoplete
2020-05-03 18:41:06 +01:00

417 lines
10 KiB
VimL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

" Standard setup {{{1
" set non-compatible
set nocompatible
" set syntax highlighting
syntax on
" Enable netrw
filetype plugin indent on
" start pathogen
call pathogen#infect()
call pathogen#helptags()
"Leaders {{{1
let mapleader = ","
let maplocalleader = "\\"
let base16colorspace=256 " Access colors present in 256 colorspace
colorscheme base16-gruvbox-dark-hard
" Config {{{1
" Set auto read so a file is updated if externally changed
set autoread
" Turn on mouse Interaction
" set mouse=a
" Set spelcheck language
set spelllang=en_gb
" Set default split to be right or bottom
set splitright
set splitbelow
" Tell vim it's a fast terminal
set ttyfast
" set relative ruler with current line as real line number
set relativenumber
set number
" Stop vim wrapping a line mid-word
set linebreak
" search in sub folders
set path+=**
" Display matching files when tab completing - ignoring files that I probably
" dont want to match
set wildmenu
set wildignore+=*.min.js,*.min.css,*/node_modules/*,*/dist/*
" Time vim waits to see if you are pushing another key
set timeoutlen=500
" set tabwidth
set autoindent
set smartindent
set shiftwidth=4
set tabstop=4
" Add invisivle character reperesentation
set list listchars=tab:»\ ,trail:\␣,eol:↩
" make search highlight as you type
set incsearch
" Make search case insensitive unless I type a capital letter
set ignorecase smartcase
" Make backspace work properly in insert mode
set backspace=indent,eol,start
" Show commands as you type them
set showcmd
set cursorline
" Make vim default to the plus register (system clipboard) when yanking etc.
"set clipboard=unnamedplus
" Make the cursor change in insert mode
"Ps = 0 -> blinking block.
"Ps = 1 -> blinking block (default).
"Ps = 2 -> steady block.
"Ps = 3 -> blinking underline.
"Ps = 4 -> steady underline.
"Ps = 5 -> blinking bar (xterm).
"Ps = 6 -> steady bar (xterm).
let &t_SI = "\e[5 q"
let &t_EI = "\e[1 q"
" reset cursor on start
" In zsh I have a bar when in insert mode and a box when in visual. I want
" vim to automatically switch to a box when I open it
augroup cursorToBox
au!
autocmd VimEnter * silent !echo -ne "\e[1 q"
augroup END
set scrolloff=5
" Highlighting {{{1
" background {{{2
highlight Normal guibg=NONE ctermbg=NONE
" Spell {{{2
highlight clear SpellBad
highlight SpellBad cterm=underline ctermfg=red
highlight clear SpellRare
highlight SpellRare cterm=underline ctermfg=yellow
highlight clear SpellLocal
highlight SpellLocal cterm=underline ctermfg=yellow
" Plugin Options {{{1
" Airline
set laststatus=2
let g:airline_powerline_fonts = 1
let g:airline_theme='base16'
" Vimtex
let g:tex_flavor='latex'
let g:vimtex_view_method='zathura'
let g:vimtex_quickfix_mode=0
set conceallevel=1
let g:tex_conceal='abdmg'
" Tables
let g:table_mode_corner_corner='+'
let g:table_mode_header_fillchar='='
" UtiliSnips
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsEditSplit="vertical"
" Lion
let g:lion_squeeze_spaces = 1
" FZF
" Prefixes all of the fzf commands
let g:fzf_command_prefix = 'Fzf'
" Mappings for common Fzf commands
nnoremap <leader>f = :FzfFiles<cr>
nnoremap <leader>b = :FzfBuffers<cr>
nnoremap <leader>h = :FzfHelptags<cr>
nnoremap <leader>/ = :FzfRg
" typescript
let g:typescript_indent_disable = 1
" deoplete
" If I am running neovim, I want deoplete to start
if has('nvim')
let g:deoplete#enable_at_startup = 1
endif
"}}}
" Functions {{{1
function! NewHtml()
read ~/Templates/html
normal! ggdd
setlocal filetype=html
endfunction
function! NewLatex()
read ~/Templates/latex
normal! ggdd
setlocal filetype=tex
endfunction
" Moves to open window, or focuses it
" https://www.reddit.com/r/vim/comments/8f80o3/awesome_way_to_navigate_windows_and_autocreate/
function! WinMove(key)
let t:curwin = winnr()
exec "wincmd ".a:key
if (t:curwin == winnr())
if (match(a:key,'[jk]'))
wincmd v
else
wincmd s
endif
exec "wincmd ".a:key
endif
endfunction
" Commands {{{1
"gets the wp salts
command! WpSalts :r! curl https://api.wordpress.org/secret-key/1.1/salt 2> /dev/null
" Mappings {{{1
" Move lines up/down or chars left/right using arrow keys
nnoremap <Down> ddp
nnoremap <Up> ddkP
nnoremap <Right> xp
nnoremap <Left> xhP
" Maps the semi colon to colon in normal mode
nnoremap ; :
nnoremap : ;
" Maps the semi colon to colon in visual mode
vnoremap ; :
vnoremap : ;
" Compiles documents
" The uppercase versions don't push enter an extra time resulting in seeing
" the output of the compile command. Useful for debugging
nnoremap <leader>cc :w! \| !compiler <c-r>%<CR><CR>
nnoremap <leader>cC :w! \| !compiler <c-r>%<CR>
nnoremap <leader>cl :w! \| !compiler <c-r>% letter<CR><CR>
nnoremap <leader>cL :w! \| !compiler <c-r>% letter<CR>
" Opens the compiled documetn
" If something like html, it doesn't need to be compiled first
nnoremap <leader>co :!opout <c-r>%<CR><CR>
" Activate spelling
nnoremap <F7> :set spell!<cr>
" Disable Scroll wheel
noremap <ScrollWheelUp> <nop>
noremap <ScrollWheelDown> <nop>
" make ctrl + hjkl move + create windows
nnoremap <C-h> :call WinMove('h')<cr>
nnoremap <C-j> :call WinMove('j')<cr>
nnoremap <C-k> :call WinMove('k')<cr>
nnoremap <C-l> :call WinMove('l')<cr>
" Make Ctrl C and Ctrl V work on system clipboard
" if in visual or insert mode respectively
vnoremap <C-c> "+y
inoremap <C-v> <Esc>"+pa
" Make Ctrl t open new tab
" nnoremap <C-t> :tabnew<cr>
" map gV to select previously pasted
nnoremap <expr> gV "`[".getregtype(v:register)[0]."`]"
"
cnoremap w1 w!
" Set :w!! to save with sudo
cnoremap w!! w !sudo tee %
cnoremap w11 w !sudo tee %
"Run current line as command
nnoremap <leader>q !!$SHELL <cr>
vnoremap <leader>q !$SHELL <cr>
" Do Shebang line
" inoremap <C-y> <Esc>:sil exe ".!which <cWORD>" <bar> s/^/#!/ <bar> filetype detect<cr>YpDi
inoremap <C-y> <Esc>:sil s/^/#!\/usr\/bin\/env / <bar> filetype detect<cr>YpDi
" DO bullet points
inoremap <C-j> <esc>:exe "norm Ypf lDB\<C-a>"<cr>A
" edit vimrc
nnoremap <leader>ev :vsplit $MYVIMRC<cr>
nnoremap <leader>sv :source $MYVIMRC<cr>
" add new line without entering insert mode
nnoremap <CR> o<Esc>
nnoremap <S-Enter> O<Esc>
" Make jj in insert mode go to normal mode
inoremap jj <Esc>
" Fix previous spelling mistake
inoremap <C-l> <c-g>u<Esc>[s1z=`]a<c-g>u
function! s:make_email_list(lines)
let l:emails = []
"return type( a:lines )
for email in a:lines
let l:address = substitute(split( email, "\t" )[0], " ","","" )
let l:name = split( email, "\t" )[1]
let l:emails = add( l:emails, l:name . " <" . l:address . ">" )
endfor
return join(l:emails, ', ')
endfunction
inoremap <expr> <c-c> fzf#vim#complete({
\ 'source': '$HOME/Contacts/lookup',
\ 'reducer': function('<sid>make_email_list'),
\ 'options': '--multi',
\ 'down': '30%' })
" Stops vim doing anything when terminal gains or looses focus
noremap <silent> <Esc>[I <nop>
noremap <silent> <Esc>[O <nop>
noremap! <silent> <Esc>[I <nop>
noremap! <silent> <Esc>[O <nop>
vnoremap <leader>u :B !urlencode<cr>
vnoremap <leader>U :B !urldecode<cr>
" File Type Specific {{{1
"Make web files fold on indent {{{2
augroup file_web
autocmd!
autocmd FileType html,xhtml,css,less,javascript,php setlocal foldmethod=indent "foldenable
augroup END
" js maps {{{2
augroup javascript
autocmd!
"binds this in class
autocmd FileType javascript nnoremap <localleader>b Ithis.^y$$a = pa.bind(this);
augroup END
"
" email maps {{{2
augroup mail
autocmd!
"binds this in class
autocmd FileType mail setlocal spell
augroup END
" less maps {{{2
augroup css
autocmd!
"binds this in class
autocmd FileType less nnoremap <leader>cl :w! \| !compiler styles.less<CR><CR>
autocmd FileType less nnoremap <leader>cL :w! \| !compiler styles.less<CR>
autocmd FileType less vmap <leader>a gL:
augroup END
" Add Html maps, Currently only pandoc conversion {{{2
augroup html
autocmd!
" Run current line through pandoc.
" Convert from markdown to html
autocmd FileType html nnoremap <localleader>p :.!pandoc -t html -f markdown-auto_identifiers --wrap=preserve<cr>
"convert from html to markdown
autocmd FileType html nnoremap <localleader>P :.!pandoc -t markdown -f html --wrap=preserve --atx-headers<cr>
"Run current selection through pandoc
" Convert from markdown to html
autocmd FileType html vnoremap <localleader>p :!pandoc -t html -f markdown-auto_identifiers --wrap=preserve<cr>
"convert from html to markdown
autocmd FileType html vnoremap <localleader>P :!pandoc -t markdown -f html --wrap=preserve --atx-headers<cr>
augroup END
" Add latex maps, Currently only pandoc conversion {{{2
augroup latex
autocmd!
" Run current line through pandoc.
" Convert from markdown to latex
autocmd FileType tex,latex nnoremap <localleader>p :.!pandoc -t latex -f markdown-auto_identifiers --wrap=preserve<cr>
"convert from latex to markdown
autocmd FileType tex,latex vnoremap <localleader>P :.!pandoc -t markdown -f latex --wrap=preserve --atx-headers<cr>
"Run current selection through pandoc
" Convert from markdown to latex
autocmd FileType tex,latex vnoremap <localleader>p :!pandoc -t latex -f markdown-auto_identifiers --wrap=preserve<cr>
"convert from latex to markdown
autocmd FileType tex,latex vnoremap <localleader>P :!pandoc -t markdown -f latex --wrap=preserve --atx-headers<cr>
augroup END
" Make vim fold using markers {{{2
augroup file_i3
autocmd!
autocmd FileType i3config setlocal foldmethod=marker "foldenable
augroup END
" Make vim fold using markers {{{2
augroup file_vim
autocmd!
autocmd FileType vim setlocal foldmethod=marker "foldenable
augroup END
" Make json fold using syntax {{{2
augroup file_json
autocmd!
autocmd FileType json setlocal foldmethod=syntax "foldenable
augroup END
" Make md files use spellcheck{{{2
augroup file_md
autocmd!
autocmd FileType markdown setlocal spell
augroup END
""set es6 files to javascript {{{2
augroup detectES6
autocmd!
autocmd BufNew,BufNewFile,BufRead *.es6 :setlocal filetype=javascript
augroup END
""set htaccess variations to apache {{{2
augroup detectHtaccess
autocmd!
autocmd BufNew,BufNewFile,BufRead *.htaccess,*.localhtaccess,*.livehtaccess :setlocal filetype=apache
augroup END