dot_files/.vimrc

476 lines
13 KiB
VimL
Raw Normal View History

" Source vimrc on vim startup
" autocmd! VimEnter * source ~/.vimrc
" Load rename plugin
2018-02-13 13:16:00 +00:00
" so ~/.vim/Rename.vim
2017-07-09 00:07:36 +03:00
2017-10-03 00:00:02 +01:00
" let g:EclimCompletionMethod = 'omnifunc'
" Java Autocomplete
2017-10-25 00:00:01 +01:00
" let g:acp_behaviorJavaEclimLength=3
" function MeetsForJavaEclim(context)
" return g:acp_behaviorJavaEclimLength >= 0 &&
" \ a:context =~ '\k\.\k\{' . g:acp_behaviorJavaEclimLength . ',}$'
" endfunction
" let g:acp_behavior = {
" \ 'java': [{
" \ 'command': "\<c-x>\<c-u>",
" \ 'completefunc' : 'eclim#java#complete#CodeComplete',
" \ 'meets' : 'MeetsForJavaEclim',
" \ }]
" \ }
2017-08-27 00:00:02 +03:00
" Rezise splits
"nnoremap <C-Left> :vertical resize -20<CR>
2017-07-09 00:07:36 +03:00
" Autoindent html
" autocmd BufWritePre *.html :normal gg=G
" Remove spaces at end of lines
autocmd BufWritePre * %s/\s\+$//e
" Fold all with leader + f
nnoremap <Leader>f :call ToggleFold()<CR>
" Set relative line number and number to see current line number
" set rnu
set number
" Show commands as being written
set showcmd
" Set syntastic settings
set statusline+=%#warningmsg#
2018-02-14 00:00:02 +00:00
if exists("SyntasticStatuslineFlag")
set statusline+=%{SyntasticStatuslineFlag()}
endif
2017-07-09 00:07:36 +03:00
set statusline+=%*
" Disables syntastic popup window with messages
" Set both to 1 to turn it on
2019-02-06 15:42:21 +00:00
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
" 3 errors is more than enough
let g:syntastic_loc_list_height=3
2018-03-27 00:00:02 +03:00
nnoremap <F10> :SyntasticCheck mypy<CR>
2017-07-09 00:07:36 +03:00
" Set xptemplate trigger key to tab
let g:xptemplate_key = '<Tab>'
" Autocomplete with Tab
2018-04-04 00:00:02 +03:00
" inoremap <Tab> <C-x><Space><CR>
2017-07-09 00:07:36 +03:00
"inoremap <Caps> <space><space><space><space>
2017-07-09 02:00:02 +03:00
" Rebind <Leader> key
" I like to have it here becuase it is easier to reach than the default and
" it is next to ``m`` and ``n`` which I use for navigating between tabs.
let mapleader = ","
2017-07-09 00:07:36 +03:00
" Swap lines
nnoremap <Leader>k :-1,-1m+0<CR>k
nnoremap <Leader>j :+0,+0m+1<CR>
2017-08-27 00:00:02 +03:00
vnoremap <Leader>k :m '<-2<CR>gv=gv
vnoremap <Leader>j :m '>+1<CR>gv=gv
2017-07-09 00:07:36 +03:00
" Enable folding with spacebar
nnoremap <space> za
" Make surrounding with various characters easier
nmap <Leader>' ysiW'
nmap <Leader>" ysiW"
nmap <Leader>0 ysiW)
" Go to normal mode by tapping jk or kj
inoremap kj <Esc>
inoremap jk <Esc>
" Easier buffer closing
nnoremap <Leader>q :bd<CR>
2019-02-06 15:42:21 +00:00
" Close splits instead of buffers
" nnoremap <Leader>q :<C-w>q<CR>
2017-07-09 00:07:36 +03:00
" Swap to previous buffer
nnoremap <Leader><Tab> :b#<CR>
" Map backspace to delete
nnoremap <BS> h<DEL>
vnoremap <BS> d
2019-02-06 15:42:21 +00:00
" Save with <Leader>s in normal and insert mode
2017-07-09 00:07:36 +03:00
noremap <silent> <Leader>s :update<CR>
2019-02-06 15:42:21 +00:00
inoremap <silent> <Leader>s <ESC>:update<CR>
2018-04-03 08:31:22 +03:00
" Sudo save with <Leader>S
2018-04-02 12:00:02 +03:00
noremap <silent> <Leader>S :w !sudo tee % > /dev/null<CR>
2019-02-06 15:42:21 +00:00
" map sort function to a key
vnoremap <Leader>s :sort<CR>
2017-07-09 00:07:36 +03:00
" Writes to all buffers when switching to another buffer
set autowrite
" Enable tabs plugin
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
2017-10-08 12:00:02 +01:00
" let g:airline_left_sep='>'
" let g:airline_right_sep='<'
" let g:airline_detect_modified=1
let g:airline_powerline_fonts=1
" let g:airline_section_b = '%{strftime("%c")}'
" let g:airline_section_y = 'BN: %{bufnr("%")} FT: %y'
2019-10-13 23:47:59 +01:00
let g:airline#extensions#ale#enabled = 1
2017-10-08 12:00:02 +01:00
2017-07-09 00:07:36 +03:00
" Enable wildmenu which is an enhanced command completion
2017-10-08 12:00:02 +01:00
"
2017-07-09 00:07:36 +03:00
set wildmenu
" Better copy & paste
" When you want to paste large blocks of code into vim, press F2 before you
" paste. At the bottom you should see ``-- INSERT (paste) --``.
set pastetoggle=<F2>
set clipboard=unnamed
" Mouse and backspace
set mouse=a " on OSX press ALT and click
set bs=2 " make backspace behave like normal again
" Remember the cursor last position
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
" Set VIMHOME
if has('win32') || has ('win64')
let $VIMHOME = $VIM."/vimfiles"
else
let $VIMHOME = $HOME."/.vim"
endif
" Bind nohl
" Removes highlight of your last search
" ``<C>`` stands for ``CTRL`` and therefore ``<C-n>`` stands for ``CTRL+n``
2017-07-09 02:00:02 +03:00
noremap <F3> :nohl<CR>
vnoremap <F3> :nohl<CR>
2017-07-09 00:07:36 +03:00
"inoremap <C-n> :nohl<CR>
2018-03-02 16:18:24 +00:00
noremap <F5> :syntax sync fromstart<CR>
vnoremap <F5> :syntax sync fromstart<CR>
2017-07-09 00:07:36 +03:00
" Tab switching
noremap<C-tab> :b#
vnoremap <C-tab> :b#
"inoremap <C-n> :b#
" Quicksave command
2018-02-13 13:16:00 +00:00
" noremap <C-Z> :update<CR>
" vnoremap <C-Z> <C-C>:update<CR>
" inoremap <C-Z> <C-O>:update<CR>
2017-07-09 00:07:36 +03:00
" bind Ctrl+<movement> keys to move around the windows, instead of using
" Ctrl+w + <movement>
" Every unnecessary keystroke that can be saved is good for your health :)
2019-02-06 15:42:21 +00:00
"nmap <c-j> :wincmd j
2017-07-09 00:07:36 +03:00
map <c-j> <c-w>j
map <c-k> <c-w>k
map <c-l> <c-w>l
map <c-h> <c-w>h
" easier moving between tabs
2018-10-17 17:00:02 +01:00
map <Leader>m <esc>;bn<CR>
map <Leader>n <esc>;bp<CR>
2017-07-09 00:07:36 +03:00
" Create empty buffer and open it
map <Leader>t <esc>:enew<CR>
" easier moving of code blocks
" Try to go into visual mode (v), thenselect several lines of code here and
2019-02-06 15:42:21 +00:00
" then press `>` several times.
2017-07-09 00:07:36 +03:00
vnoremap < <gv " better indentation
vnoremap > >gv " better indentation
" Show whitespace
" MUST be inserted BEFORE the colorscheme command
autocmd ColorScheme * highlight ExtraWhitespace ctermbg=red guibg=red
au InsertLeave * match ExtraWhitespace /\s\+$/
" Color scheme
" mkdir -p ~/.vim/colors && cd ~/.vim/colors
" wget -O wombat256mod.vim
" http://www.vim.org/scripts/download_script.php?src_id=13400
set t_Co=256
color wombat256mod
2017-12-05 12:00:02 +00:00
" color ronakg
2017-10-08 12:00:02 +01:00
" color mayansmoke
" color github
2017-07-09 00:07:36 +03:00
" Spelling
" set spell
" set complete+=kpspell
" Enable syntax highlighting
" You need to reload this file for the change to apply
filetype off
filetype plugin indent on
syntax on
" In visual mode searches for the selected word
vnoremap // y/<C-R>"<CR>
" Showing line numbers and length
2020-03-05 00:17:15 +00:00
set tw=0 " width of document (used by gd)
2019-02-06 15:42:21 +00:00
" set tw=120 " width of document (used by gd)
2017-07-09 00:07:36 +03:00
set nowrap " don't automatically wrap on load
set fo-=t " don't automatically wrap text when typing
2020-03-05 00:17:15 +00:00
" set colorcolumn=80
set colorcolumn=0
" highlight ColorColumn ctermbg=233
highlight ColorColumn ctermbg=001
2017-07-09 00:07:36 +03:00
" Useful settings
set history=700
set undolevels=700
" Real programmers don't use TABs but spaces
set tabstop=4
set softtabstop=4
set shiftwidth=4
set shiftround
set expandtab
" Make search case insensitive
set hlsearch
set incsearch
set ignorecase
set smartcase
" Disable stupid backup and swap files - they trigger too many events
" for file system watchers
"set nobackup
"set nowritebackup
"set noswapfile
" Backup files are great so lets keep them in 1 place
" Make sure you have ~/vimtmp/ folder. In the future will
" move /vimtmp/ in $VIMHOME
set backupdir=~/.vim/tmp//,.
set directory=~/.vim/tmp//,.
set dir=~/.vim/tmp//,.
set undodir=~/.vim/tmp/undo//
" Setup Pathogen to manage your plugins
" mkdir -p ~/.vim/autoload ~/.vim/bundle
" curl -so ~/.vim/autoload/pathogen.vim
" https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim
" Now you can install any plugin into a .vim/bundle/plugin-name/ folder
2018-02-14 00:00:02 +00:00
2018-07-08 02:40:14 +01:00
" Pathogen does not work in combatability mode so disable
set nocp
2018-02-14 00:00:02 +00:00
" let g:pathogen_disabled = ["syntastic"]
2017-07-09 00:07:36 +03:00
call pathogen#infect()
" Settings for vim-powerline
" cd ~/.vim/bundle
" git clone git://github.com/Lokaltog/vim-powerline.git
set laststatus=2
" Settings for ctrlp
" cd ~/.vim/bundle
" git clone https://github.com/kien/ctrlp.vim.git
let g:ctrlp_max_height = 30
let g:ctrlp_working_path_mode = 'ar'
set wildignore+=*.pyc
set wildignore+=*_build/*
set wildignore+=*/coverage/*
" Settings for python-mode
" Note: I'm no longer using this. Leave this commented out
" and uncomment the part about jedi-vim instead
" cd ~/.vim/bundle
" git clone https://github.com/klen/python-mode
"" map <Leader>g :call RopeGotoDefinition()<CR>
"" let ropevim_enable_shortcuts = 1
"" let g:pymode_rope_goto_def_newwin = "vnew"
"" let g:pymode_rope_extended_complete = 1
"" let g:pymode_breakpoint = 0
"" let g:pymode_syntax = 1
"" let g:pymode_syntax_builtin_objs = 0
"" let g:pymode_syntax_builtin_funcs = 0
"" map <Leader>b Oimport ipdb; ipdb.set_trace() # BREAKPOINT<C-c>
2018-04-04 00:00:02 +03:00
" let g:SuperTabDefaultCompletionType = "<c-p>"
2017-07-09 00:07:36 +03:00
" Settings for jedi-vim
" cd ~/.vim/bundle
" git clone git://github.com/davidhalter/jedi-vim.git
2018-02-13 13:16:00 +00:00
" let g:jedi#usages_command = "<leader>z"
2018-04-04 00:00:02 +03:00
" let g:jedi#popup_on_dot = 1
2018-02-13 13:16:00 +00:00
" let g:jedi#popup_select_first = 0
" let g:jedi#force_py_version = 3
2018-04-04 00:00:02 +03:00
" let g:jedi#completions_command = '.'
" let g:jedi#show_call_signatures = 1
2018-02-13 13:16:00 +00:00
" map <Leader>b Oimport ipdb; ipdb.set_trace() # BREAKPOINT<C-c>
2017-07-09 00:07:36 +03:00
" Map C-a to select entire file
2017-11-22 00:00:02 +00:00
"nnoremap <C-a> ggVG
2017-07-09 00:07:36 +03:00
" Real vimmers dont use those
noremap <Up> <NOP>
noremap <Down> <NOP>
noremap <Left> <NOP>
noremap <Right> <NOP>
2017-08-27 00:00:02 +03:00
" Do splits with Leader-\ and Leader--
" nnoremap <silent> <C-Right> :vsp<CR>
" nnoremap <silent> <C-Up> :sp<CR>
noremap <leader>\ :vsp<CR>
noremap <leader>- :sp<CR>
" NERDTree settings
" Open NERDTree by default
"autocmd VimEnter * NERDTree
"autocmd VimEnter * wincmd p
" Toggle NEDRTree plugin
noremap <C-b> :NERDTreeToggle<CR>
let NERDTreeIgnore = ['\.pyc$', '__pycache__', '.mypy_cache', '.pytest_cache']
2017-08-27 00:00:02 +03:00
let NERDTreeShowHidden=1
2017-07-09 00:07:36 +03:00
" Better navigating through omnicomplete option list
" See
"http://stackoverflow.com/questions/2170023/how-to-map-keys-for-popup-menu-in-vim
set completeopt=longest,menuone
function! OmniPopup(action)
if pumvisible()
if a:action == 'j'
return "\<C-N>"
elseif a:action == 'k'
return "\<C-P>"
endif
endif
return a:action
endfunction
" Python folding
" mkdir -p ~/.vim/ftplugin
" wget -O ~/.vim/ftplugin/python_editing.vim
"http://www.vim.org/scripts/download_script.php?src_id=5492
set foldenable
" Keep undo history even after closing file
set undofile
" Setups template files (more on this - https://shapeshed.com/vim-templates/)
if has("autocmd")
augroup templates
autocmd BufNewFile *.py 0r ~/.vim/templates/skeleton.py
autocmd BufNewFile *.sh 0r ~/.vim/templates/skeleton.sh
augroup END
endif
" comment out highlighted lines according to file type
" put a line like the following in your ~/.vim/filetype.vim file
" and remember to turn on filetype detection: filetype on
" au! BufRead,BufNewFile *.sh,*.tcl,*.php,*.pl let Comment="#"
" if the comment character for a given filetype happens to be @
" then use let Comment="\@" to avoid problems...
2019-02-06 15:42:21 +00:00
" function! CommentLines()
" "let Comment="#" " shell, tcl, php, perl
" exe ":s@^@".g:Comment."@g"
" exe ":s@$@".g:EndComment."@g"
" endfunction
" " map visual mode keycombo 'co' to this function
" vmap co :call CommentLines()<CR>
2017-07-09 00:07:36 +03:00
" Encryption algo (vim -x file)
set cm=blowfish2
" Improve perfomance with long lines
set synmaxcol=200
set autoread
" Autosave
2017-10-31 00:00:02 +00:00
" augroup autoSaveAndRead
" autocmd!
" autocmd TextChanged,InsertLeave,FocusLost * silent! wall
" autocmd CursorHold * silent! checktime
" augroup END
2017-07-09 00:07:36 +03:00
" Lion alignment operator config (see https://github.com/tommcdo/vim-lion)
let b:lion_squeeze_spaces = 1
set showmatch
set matchtime=3
2017-10-09 00:00:02 +01:00
" Fold functions in bash
let g:sh_fold_enabled=3
2017-07-09 02:00:02 +03:00
" Recompute syntax highlighting
nnoremap <silent> <F4> :syntax sync fromstart<CR>
autocmd FileType markdown syntax sync fromstart
2017-11-02 00:00:02 +00:00
2017-11-26 00:00:02 +00:00
set cursorline
2019-02-06 15:42:21 +00:00
" Minimal number of lines before scrolling
2017-11-26 00:00:02 +00:00
set scrolloff=3
set sidescrolloff=3
2017-12-21 15:51:11 +02:00
" Easier line joining
if v:version > 703 || v:version == 703 && has('patch541')
set formatoptions+=j
endif
2018-04-03 08:31:22 +03:00
set relativenumber
2019-02-06 15:42:21 +00:00
" nnoremap <leader>Q :qa<CR>
2018-08-26 18:31:01 +01:00
" Remap ; to be : - save 1 key press :P
nnoremap ; :
nnoremap : ;
2019-02-06 15:42:21 +00:00
" Gundo docs https://sjl.bitbucket.io/gundo.vim/
2020-03-12 14:53:04 +00:00
let g:gundo_prefer_python3 = 1
2019-02-06 15:42:21 +00:00
nnoremap <F6> :GundoToggle<CR>
" Auto encrypt files related to courseworks at uni
augroup encrypted
autocmd BufNewFile */soton/*/coursework* :X
augroup END
2019-10-13 23:47:59 +01:00
" SEttings for Go
let g:neocomplete#enable_at_startup = 1 " DO NOT MOVE in another file
let g:xptemplate_key = '<Space><Space>'
" Put these lines at the very end of your vimrc file.
" Load all plugins now.
" Plugins need to be added to runtimepath before helptags can be generated.
packloadall
" Load all of the helptags now, after plugins have been loaded.
" All messages and errors will be ignored.
silent! helptags ALL
2020-02-13 19:10:15 +00:00
let g:ctrlp_custom_ignore = 'node_modules\|DS_Store\|git'
au BufNewFile,BufRead,BufReadPost *.thrift set syntax=thrift
2020-03-05 00:17:15 +00:00
" Autosave sessions
fu! SaveSess()
execute 'mksession! ' . '~/.vim/tmp/sessions/' . substitute(getcwd(), "/", '!', "g"). '.session.vim'
endfunction
fu! RestoreSess()
let l:name = expand('~/.vim/tmp/sessions/') . substitute(getcwd(), "/", '!', "g") . '.session.vim'
if filereadable(l:name)
execute 'so ' . l:name
endif
endfunction
autocmd VimLeave,BufWritePost * call SaveSess()
" autocmd VimEnter * nested call RestoreSess()
set updatetime=100
" highlight GitGutterDelete guifg=#990000 ctermfg=1
" highlight GitGutterAdd guifg=#009900 ctermfg=2
" highlight GitGutterChange guifg=#997c00 ctermfg=3