rc/vimrc

523 lines
16 KiB
VimL

"on: [1.8.8]"
"""""""""""""""""""""""""""""""""
"Authors: [Karlkorp, Inc. 2014; lhark, Inc. 2015]"
""""""""""""""""""""""""""""""""""""""""""""""""
"Type: [Vim/GVim/MacVim configuration file]"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Name: [.vimrc (unix/mac); _vimrc (MS Windows/DOS)]"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Location: [$HOME/.vimrc (unix/mac); $USERNAME\_vimrc (MS Windows)]"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"[Plug-ins list]""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"+------------------+-------------------------------------------------+"
"| AutoComplPop | https://github.com/vim-scripts/AutoComplPop |"
"| DelimitMate | https://github.com/Raimondi/delimitMate |"
"| DetectIndent | https://github.com/roryokane/detectindent |"
"| Multiple-Cursors | https://github.com/terryma/vim-multiple-cursors |"
"| Python-Mode | https://github.com/klen/python-mode |"
"| Surround | https://github.com/tpope/vim-surround |"
"| Undotree | https://github.com/mbbill/undotree |"
"| Vim-Airline | https://github.com/bling/vim-airline |"
"| Vim-GLSL | https://github.com/tikhomirov/vim-glsl |"
"| Vim-Gnupg | https://github.com/jamessan/vim-gnupg |"
"| Vundle | https://github.com/gmarik/Vundle.vim.git |"
"+------------------+-------------------------------------------------+"
"[Colorschemes list]""""""""""""""""""""""""""""""""""""""""""""""""""""
"+------------------+-------------------------------------------------+"
"| Solarized | https://github.com/altercation/vim-colors-solarized |"
"+------------------+-------------------------------------------------+"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"[To disable compatibility with Vi]"
set nocompatible
"[Use Plug-ins and Plug-in Manager(Vundle) only on UNIX or MAC OS]"
if has("unix") || has("mac")
filetype off
"[Download and install Vundle Plug-in Manager]"
try
if !isdirectory(expand("$HOME/.vim/bundle"))
silent !mkdir -p $HOME/.vim/bundle
silent cd $HOME/.vim/bundle
silent !git clone https://github.com/gmarik/Vundle.vim.git
silent cd $HOME
endif
"[Run Plug-ins]"
set runtimepath+=$HOME/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
map <F2> :VundleInstall<CR>
map <F3> :VundleUpdate<CR>
if has("python")
Plugin 'klen/python-mode'
let g:pymode_rope_lookup_project = 0
let g:pymode_rope = 0
Plugin 'davidhalter/jedi-vim'
endif
if has("ruby")
Plugin 'terryma/vim-multiple-cursors'
endif
Plugin 'mbbill/undotree'
map <F5> :UndotreeToggle<CR>
Plugin 'vim-scripts/LaTeX-Box'
map <LocalLeader>ll :Latexmk<CR>
if isdirectory(expand("$HOME/.vim/bundle/YouCompleteMe"))
"[Workaround for YCM non-portability]"
"No need for Plugin 'Valloric/YouCompleteMe', it's installed system-wide
let g:ycm_global_ycm_extra_conf = '$HOME/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
let g:ycm_server_python_interpreter = '/usr/bin/python2'
"[We're using ale for linting]"
let g:ycm_show_diagnostics_ui = 0
let g:ycm_collect_identifiers_from_tags_files=1
let g:ycm_seed_identifiers_with_syntax=1
else
Plugin 'AutoComplPop'
endif
Plugin 'w0rp/ale'
let g:ale_linters = {
\ 'cpp': ['g++'],
\ 'c': ['clang']
\ }
let g:ale_c_gcc_options='-std=c99 -pedantic'
let g:ale_sign_error = '●'
let g:ale_sign_warning = '●'
Plugin 'itchyny/lightline.vim'
let g:lightline = {
\'colorscheme': 'solarized',
\ 'active': {
\ 'left': [['mode', 'paste'], ['filename', 'modified']],
\ 'right': [['lineinfo'],
\ ['percent'],
\ ['readonly', 'linter_warnings', 'linter_errors', 'linter_ok'],
\ ['fileformat'],
\ ['fileencoding']
\ ]
\ },
\ 'component_expand': {
\ 'linter_warnings': 'LightlineLinterWarnings',
\ 'linter_errors': 'LightlineLinterErrors',
\ 'linter_ok': 'LightlineLinterOK',
\ 'lineinfo': 'LineInfo'
\ },
\ 'component_type': {
\ 'readonly': 'error',
\ 'linter_warnings': 'warning',
\ 'linter_errors': 'error'
\ },
\}
"Needed for vim-easytags"
Plugin 'xolox/vim-misc'
Plugin 'xolox/vim-easytags'
let g:easytags_async=1
"Needed for YouCompleteMe"
let g:easytags_opts=['--fields=+l']
Plugin 'godlygeek/tabular'
Plugin 'beyondmarc/opengl.vim'
Plugin 'tikhomirov/vim-glsl'
Plugin 'beyondmarc/hlsl.vim'
Plugin 'rust-lang/rust.vim'
Plugin 'mzlogin/vim-smali'
Plugin 'jamessan/vim-gnupg'
Plugin 'petRUShka/vim-opencl'
Plugin 'tpope/vim-surround'
Plugin 'captbaritone/better-indent-support-for-php-with-html'
"[Autodetect indent style of a file]"
Plugin 'roryokane/detectindent'
let g:detectindent_preferred_indent=4
let g:detectindent_autodetect=1
"[Solarized theme]"
Plugin 'altercation/vim-colors-solarized'
call vundle#end()
catch
endtry
else
filetype on
endif
"[Recognize the type/syntax of the file]"
filetype plugin on
filetype indent on
set omnifunc=syntaxcomplete#Complete
"[Enable built-in plug-ins/macros]"
runtime macros/matchit.vim
"[Enable syntax highlighting]"
syntax on
"[Read the changes after the save .vimrc]"
if has("autocmd")
autocmd! BufWritePost $MYVIMRC source $MYVIMRC
endif
"[Define the leader key]"
let mapleader=","
let maplocalleader=","
"[List of buffers]"
map <F7> :ls!<CR>:buffer<Space>
"[Reselect visual block after indent/outdent]"
vnoremap < <gv
vnoremap > >gv
"[Improve up/down movement on wrapped lines]"
nnoremap j gj
nnoremap k gk
" nnoremap <Down> gj
" nnoremap <Up> gk
" vnoremap <Down> gj
" vnoremap <Up> gk
" inoremap <Down> <C-o>gj
" inoremap <Up> <C-o>gk
"[Clear search highlights]"
nnoremap // :nohlsearch<CR>
"[Easy split navigation]"
nnoremap <C-j> <C-W>j
nnoremap <C-k> <C-W>k
nnoremap <C-h> <C-W>h
nnoremap <C-l> <C-W>l
nnoremap <C-Up> <C-W>k
nnoremap <C-Down> <C-W>j
nnoremap <C-Left> <C-W>h
nnoremap <C-Right> <C-W>l
"[Locate the desired objects in the center of the screen]"
nnoremap <silent> n nzz
nnoremap <silent> N Nzz
nnoremap <silent> * *zz
nnoremap <silent> # #zz
"[New line under/bellow current line without jump to insert-mode]"
nnoremap <leader>o o<Esc>
nnoremap <leader>O O<Esc>
"[Auto-complete parenthesis, brackets and braces, quotes]"
"inoremap " ""<Left>
"inoremap ' ''<Left>
"inoremap ( ()<Left>
"inoremap [ []<Left>
"inoremap { {}<Left>
"[Easy jump into the normal-mode from the insert-mode]"
inoremap jj <Esc>
"[To move over parenthesis, brackets, quotes in insert-mode]"
inoremap kk <Right>
inoremap hh <Left>
" http://stackoverflow.com/questions/1005/getting-root-permissions-on-a-file-inside-of-vi
cmap w!! w !sudo tee >/dev/null %
"[To disable the arrow keys]"
for prefix in ['i', 'n', 'v']
for key in ['<Up>', '<Down>', '<Left>', '<Right>']
execute prefix . "noremap " . key . " <Nop>"
endfor
endfor
"[Threshold for reporting number of lines changed]"
set report=0
"[Show command in the last line of the screen]"
set showcmd
"[Show both the tag name and a tidied-up form of the search pattern]"
set showfulltag
"[Don't give the intro message when starting Vim]"
set shortmess=""
if has("unix") || has("mac")
set shortmess+=I
endif
"[Always show StatusLine]"
set laststatus=2
"[Do not show mode in command line]"
set noshowmode
"[Splitting rules]"
set splitbelow
set splitright
set equalalways
"[Lisp coding settings]"
if (&filetype == "lisp")
set lisp
endif
"[Don't use the mouse in terminal]"
set mouse=
set mousemodel=extend
"[Fix mouse past column 222]"
if has("mouse_sgr")
set ttymouse=sgr
else
set ttymouse=xterm2
end
"[Hide mouse while printing the text]"
set mousehide
"[Visualisation settings]"
set background=dark
set ttyfast
set tabline=""
" set cmdheight=1 : default
set showtabline=0
set colorcolumn=80
set nocursorcolumn
set cmdwinheight=10
set virtualedit=all
"[GUI/Color Scheme/Font settings]"
if has("gui_running")
winsize 90 50
silent cd $HOME
set linespace=0
set guioptions=""
set guitablabel=""
if has("autocmd")
autocmd InsertEnter * set cursorline
autocmd InsertLeave * set nocursorline
endif
if has("win32") || has("win64")
try
colorscheme solarized
set guifont=PT_Mono:h12
catch
endtry
elseif has("unix")
try
colorscheme solarized
set guifont=Liberation\ Mono\ 10
catch
endtry
elseif has("mac")
try
set antialias
colorscheme solarized
set guifont=Monaco:h12
catch
endtry
endif
else
if has("unix") || has("mac")
try
set t_Co=16
let g:solarized_termtrans=1
let g:solarized_termcolors=16
colorscheme solarized
catch
endtry
endif
endif
"[Backspace functions]"
set backspace=indent,eol,start
"[Scroll settings]"
set scrolloff=10
set scrolljump=10
set showmatch
set matchpairs=\":\"
set matchpairs+=(:)
set matchpairs+={:}
set matchpairs+=[:]
"set matchpairs+=<:> : too annoying
"[Turn backup off and value of history]"
set nobackup
set noswapfile
set history=1000
set nowritebackup
set undolevels=5000
"[Indent & Tab/mode-line settings]"
set breakindent
set nopaste
set modeline
set smarttab
set tabstop=4
set expandtab
set autoindent
set copyindent
set smartindent
set cinwords=except,finally,def,class,with,do,if,elif,else,for,while,try,switch
set cinoptions+=l1
set modelines=1
set shiftwidth=4
set softtabstop=4
"[TextWidth settings]"
set textwidth=0
"[Settings of line numbers]"
set number
set numberwidth=2
set relativenumber
"[Don't show current position]"
set ruler
"[For regular expressions turn magic on]"
set magic
"[Search settings]"
set hlsearch
set incsearch
set smartcase
set ignorecase
set wrapscan
"[When on, the ":substitute" flag 'g' is default on]"
set nogdefault
"[Language settings]"
set iminsert=0
set imsearch=0
set helplang=en
set langmenu=en
language messages POSIX
"[Show DocName in title]"
set title
"[Hide/show the white-space and more invisible symbols]"
set list
set listchars=nbsp,tab:\|\ ,trail:-
set nojoinspaces
"[Folding settings]"
set foldenable
set foldclose=""
set foldcolumn=0
set foldlevel=99
set foldlevelstart=99
set foldmethod=indent
set foldopen=block,hor,mark,percent,quickfix,search,tag,undo
"[Set to auto-read and to auto-write when
" a file is changed from the outside]"
set autoread
set autowrite
"[Vim will change the current working directory whenever you
" open a file, switch buffers, delete a buffer or open/close a window]"
set autochdir
"[Not be redrawn while executing macros,
" registers that have not been typed]"
set lazyredraw
"[Time-out settings]"
set timeout
set timeoutlen=3000
set ttimeoutlen=100
"[When off a buffer is unloaded when it is abandoned]"
set hidden
"[Switch between buffers. Settings]"
set switchbuf=useopen,usetab,newtab
"[Wrap settings]"
set wrap
set whichwrap=<,>,[,]
set nolinebreak
"[Encoding/FileType settings]"
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,latin1,cp1251,koi8-r,utf-16le
"[Use UNIX, DOS, MAC FileType]"
set fileformat=unix
set fileformats=unix,mac,dos
"[Better consistency between Windows and UNIX]"
set sessionoptions=""
set viewoptions=folds,options,cursor,unix,slash
set sessionoptions+=unix,slash,blank,buffers,curdir
set sessionoptions+=folds,help,options,tabpages,winsize
"[Completion settings]"
if has("autocmd")
autocmd FileType c set omnifunc=ccomplete#Complete
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
if has("ruby")
autocmd FileType ruby set omnifunc=rubycomplete#Complete
endif
if has("perl")
autocmd FileType perl set omnifunc=perlcomplete#CompletePERL
endif
if has("python")
autocmd FileType python set omnifunc=pythoncomplete#Complete
endif
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
endif
"[Completion search settings]"
set complete=.,b,d,i,k,s,t,u,U,w
set completeopt=longest,menuone,preview,menu
"[For jump between Java import statement]"
set includeexpr=substitute(v:fname,'\\.','/','g')
"[Determines the maximum number of items
" to show in the popup menu for Insert mode completion]"
set pumheight=7
"[No annoying sound or errors]"
set noerrorbells
set novisualbell
"[Shared with OS clipboard]"
set clipboard=unnamed
"[Abbreviations]"
cnoreabbrev W w
cnoreabbrev Q q
"[Turn on the wild menu and wild-mode settings]"
set wildmenu
set wildmode=list:longest,full
set wildignore=*.o,*.obj,*.pyc,*.pyo,*.swp,*.bak,*.exe,*.class
"[Use a GUI dialog when confirming]"
set confirm
"[Method used for encryption when the buffer is written to a file]"
if (version <= 702)
set cryptmethod=zip
else
set cryptmethod=blowfish
endif
"[Make the scripts executable]"
function! ChangeScriptMode()
if getline(1) =~ "#!"
if getline(1) =~ "bin/"
silent !chmod +x <afile>
endif
endif
endfunction
if has("unix") || has("mac")
if has("autocmd")
autocmd BufWritePost * call ChangeScriptMode()
endif
endif
"[Python/Perl scripts templates]"
function! InitScriptFile(type)
if (a:type == "python")
execute setline(1, "#!/usr/bin/env python3")
execute setline(2, "# -*- coding: utf-8 -*-")
elseif (a:type == "perl")
execute setline(1, "#!/usr/bin/env perl")
execute setline(2, "")
execute setline(3, "use warnings;")
execute setline(4, "use strict;")
endif
normal Go
endfunction
if has("autocmd")
autocmd BufNewFile *.pl,*.pm call InitScriptFile("perl")
autocmd BufNewFile *.py,*.pyw call InitScriptFile("python")
endif
"[Remove tabs and spaces at the end of lines]"
function! DeleteTrailingTWS()
if &ft =~ 'diff'
return
end
normal mb
silent %s/[ \t]*$//g
silent %s/\s\+$//ge
normal 'b
endfunction
"[Do not clean up trailing spaces in binary mode]"
if has("autocmd") && !&binary
autocmd BufWritePre *.py,*.pyw retab
autocmd BufWritePre * call DeleteTrailingTWS()
endif
"[Toggle relativenumber between normal & insert mode]"
"[Credit: https://jeffkreeftmeijer.com/vim-number/#relative-line-numbers ]"
if has("autocmd")
augroup numbertoggle
autocmd!
autocmd BufEnter,FocusGained,InsertLeave * set relativenumber
autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber
augroup END
endif
"[ALELint & Lightline compat]"
function! LightlineLinterWarnings() abort
let l:counts = ale#statusline#Count(bufnr(''))
let l:all_errors = l:counts.error + l:counts.style_error
let l:all_non_errors = l:counts.total - l:all_errors
return l:counts.total == 0 ? '' : printf('%d ◆', all_non_errors)
endfunction
function! LightlineLinterErrors() abort
let l:counts = ale#statusline#Count(bufnr(''))
let l:all_errors = l:counts.error + l:counts.style_error
let l:all_non_errors = l:counts.total - l:all_errors
return l:counts.total == 0 ? '' : printf('%d ✗', all_errors)
endfunction
function! LightlineLinterOK() abort
let l:counts = ale#statusline#Count(bufnr(''))
let l:all_errors = l:counts.error + l:counts.style_error
let l:all_non_errors = l:counts.total - l:all_errors
return l:counts.total == 0 ? '✓ ' : ''
endfunction
function! LineInfo()
return !&binary ? '%3l:%-2v' : '%3l:%-2v off:%o,0x%O'
endfunction
autocmd User ALELint call s:MaybeUpdateLightline()
" Update and show lightline but only if it's visible (e.g., not in Goyo)
function! s:MaybeUpdateLightline()
if exists('#lightline')
call lightline#update()
end
endfunction