summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vimrc1157
1 files changed, 538 insertions, 619 deletions
diff --git a/.vimrc b/.vimrc
index cf674af..e3f2a72 100644
--- a/.vimrc
+++ b/.vimrc
@@ -1,620 +1,539 @@
-" {{{ =============================>
-" Plugin Manager
-
-
-call plug#begin('~/.vim/plugged')
-
-" {{{ ------------------------->
-" Plugins
-
-Plug 'morhetz/gruvbox', {'rtp': 'vim'} " Color theme
-Plug 'junegunn/fzf' " Used for commands like :Commits, :History, :Files
-Plug 'junegunn/fzf.vim'
-Plug 'preservim/nerdtree' " Browse directories (:NERDTree)
-Plug 'Raimondi/delimitMate' " Autocomplete brackets and quotes
-Plug 'tomtom/tcomment_vim' " Toggle comments (gc, gcc)
-Plug 'godlygeek/tabular' " Line up text by a given character (:Tabularize /CHAR)
-Plug 'vim-syntastic/syntastic' " Syntax error checker
-Plug 'neoclide/coc.nvim', {'branch': 'release'} " IntelliSense practically
-Plug 'itchyny/lightline.vim' " Statusline and tabline for Vim
-Plug 'tpope/vim-fugitive' " git integration
-Plug 'mbbill/undotree' " Easily interact with undo history
-Plug 'OmniSharp/omnisharp-vim' " C# tools (autocompletion, ...)
-Plug 'wakatime/vim-wakatime' " Time tracking via wakaime.com
-Plug 'dense-analysis/ale' " Syntax checker via LSP
-Plug 'ryanoasis/vim-devicons' " Icons on stuff like NERDTree
-Plug 'honza/vim-snippets' " Ready snippets for some langauges
-Plug 'pseewald/vim-anyfold' " Better folding
-Plug 'editorconfig/editorconfig-vim' " Support for EditorConfig
-Plug 'tpope/vim-eunuch' " Easy UNIX shell commands
-Plug 'mg979/vim-visual-multi' " Multiple line cursor (and other stuff)
-Plug 'zivyangll/git-blame.vim' " Show who last edited a line
-Plug 'kien/tabman.vim' " Show open buffers
-Plug 'alvan/vim-closetag' " Automatically add HTML closing tags
-Plug 'OrangeT/vim-csharp'
-Plug 'neovimhaskell/haskell-vim'
-Plug 'davidhalter/jedi-vim'
-
-" }}} -------------------------<
-
-call plug#end()
-
-" }}} =============================<
-
-" {{{ =============================>
-" Vim-anyfold + folding
-
-filetype plugin indent on
-syntax on
-autocmd Filetype * AnyFoldActivate " activate for all filetypes
-autocmd FileType,BufRead vim,text,sh setlocal foldmethod=marker
-set foldlevel=99 " Open all folds by default
-autocmd FileType,BufRead vim,sh setlocal foldlevel=0
-
-" }}} =============================<
-
-" {{{ =============================>
-" General
-
-" {{{ ------------------------->
-" Color scheme
-
-colorscheme gruvbox
-set background=dark " Setting dark mode
-let g:gruvbox_contrast_dark='medium'
-
-" }}} -------------------------<
-
-" {{{ ------------------------->
-" Identation
-
-set tabstop=4 " Show tabs as 4 wide
-set shiftwidth=4 " Indent with 4 spaces
-
-autocmd BufRead,BufNewFile *.component.css set filetype=css
-autocmd FileType css,ts setlocal ts=2 sw=2 sts=0 expandtab " Tranform tabs in CSS and TS into 2 spaces
-
-" }}} -------------------------<
-
-" {{{ ------------------------->
-" Character visuals
-
-set list " Enabled customization of whitespace characters, so spaces, tabs, EOL, etc. (:h 'list')
-
-" Show tabs as a | with three spaces
-" DO NOT remove the trailing space in the next line!
-set listchars=tab:│\
-
-" }}} -------------------------<
-
-" {{{ ------------------------->
-" Backspace and cursor
-
-autocmd InsertEnter,InsertLeave * set cul! " Highlight current line, when in insert mode
-set backspace=indent,eol,start " Better backspace functionality
-
-set scrolloff=0 " Don't keep any screen lines above or below the cursor
-set number " Show line numbers to the left
-set mouse=a " Mouse support
-
-" Thin cursor in insert mode in Gnome-Terminal (version >=3.16 ; also works with Terminator)
-if has("autocmd")
- au VimEnter,InsertLeave * silent execute '!echo -ne "\e[1 q"' | redraw!
- au InsertEnter,InsertChange *
- \ if v:insertmode == 'i' |
- \ silent execute '!echo -ne "\e[5 q"' | redraw! |
- \ elseif v:insertmode == 'r' |
- \ silent execute '!echo -ne "\e[3 q"' | redraw! |
- \ endif
- au VimLeave * silent execute '!echo -ne "\e[ q"' | redraw!
-endif
-
-" }}} -------------------------<
-
-" {{{ ------------------------->
-" Ctrl bindings
-
-" Ctrl-Backspace deletes the previous word in insert mode.
-noremap! <C-BS> <C-w>
-noremap! <C-h> <C-w>
-
-" The usual Ctrl+s, Ctrl+v type of bindings
-" Partly taken from: https://gist.github.com/jshih/3423345
-vmap <C-c> "+yi<Esc>
-vmap <C-x> "+c<Esc>
-vmap <C-v> c<ESC>"+p<Esc>
-imap <C-v> <ESC>"+pa
-map <C-a> ggVG
-imap <C-z> <ESC>ui
-imap <C-r> <ESC><C-r>i
-"imap <C-S-z> <C-r> An impossible dream
-imap <C-s> <ESC>:w<CR>a
-nmap <C-S> <ESC>:w<CR>
-map <C-f> :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>
-
-" Use Ctrl + hjkl for navigation in insert mode
-" inoremap <C-h> <Left>
-" inoremap <C-j> <Down>
-" inoremap <C-k> <Up>
-" inoremap <C-l> <Right>
-
-" Go between tabs with Ctrl+l (tab to the right) and Ctrl+h (tab to the left)
-" nnoremap <C-l> :tabn<CR>
-" nnoremap <C-h> :tabp<CR>
-
-" }}} -------------------------<
-
-" {{{ ------------------------->
-" Comand abbreviations
-
-" Cyrilic (Bulgarian yawerty layout) support
-ca в w
-ca ва wa
-ca ь x
-ca ьа xa
-
-" The following works almost the same as normal :x and :xa, but can also close running jobs (e.g. terminal windows)
-ca x w <bar> q!
-ca xa wa <bar> qa!
-
-" Open a terminal vim tab with tt and open a blank tab with te
-ca tt tab ter
-ca te tabe
-
-" }}} -------------------------<
-
-" {{{ ------------------------->
-" Custom app open bindings
-
-nnoremap <F8> :<C-u>call gitblame#echo()<CR>
-nnoremap = :tab ter ++close lazygit<CR>
-
-" }}} -------------------------<
-
-" {{{ ------------------------->
-" Other bindings
-
-" Don't get into insert mode after adding a line with o/O
-nnoremap o o<Esc>
-nnoremap O O<Esc>
-
-" Move a line up and down with Alt+k and Alt-j
-execute "set <M-j>=\ej"
-nnoremap <M-j> <ESC>:m+1<CR>
-execute "set <M-k>=\ek"
-nnoremap <M-k> <ESC>:m-2<CR>
-
-" }}} -------------------------<
-
-" {{{ ------------------------->
-" Omni complition
-
-" Omni completion supports C, HTML, CSS, JavaScript, PHP, Python, Ruby, SQL, XML
-set omnifunc=syntaxcomplete#Complete " Completion for all supported languages
-
-" Do omni completion from Ctrl+Space
-nnoremap <C-Space> <C-X><C-O>
-
-" }}} -------------------------<
-
-" {{{ ------------------------->
-" Spell check mode
-
-" When you press F6 it will toggle a "spell check mode",
-" spell is activated and the colorscheme is changed
-nmap <F6> :call SpellCheckModeToggle()<CR>
-
-function! SpellCheckModeToggle()
- if g:colors_name == 'gruvbox'
- set spell
- colorscheme darkblue
- else
- set nospell
- colorscheme gruvbox
- endif
-endfunction
-
-" Scrolling (shows history) in terminal (except in lazygit)
-" Scroll up to activate it, and press a to deactivate it
-" Slightly modified version of: https://github.com/vim/vim/issues/2490#issuecomment-393973253
-function! ExitNormalMode()
- unmap <buffer> <silent> <RightMouse>
- call feedkeys("a")
-endfunction
-
-function! EnterNormalMode()
- if @% == '!lazygit'
- tunmap <silent> <ScrollWheelUp>
- elseif &buftype == 'terminal' && mode('') == 't'
- call feedkeys("\<c-w>N")
- call feedkeys("\<c-y>")
- map <buffer> <silent> <RightMouse> :call ExitNormalMode()<CR>
- endif
-endfunction
-
-tmap <silent> <ScrollWheelUp> <c-w>:call EnterNormalMode()<CR>
-
-" }}} -------------------------<
-
-" }}} =============================<
-
-" {{{ =============================>
-" DelimitMate
-
-let delimitMate_expand_cr = 1
-" Don't autocomplete diamond brackets in HTML (compatibility with closetag plugin)
-autocmd FileType html let b:delimitMate_matchpairs='(:),[:],{:}'
-
-" }}} =============================<
-
-" {{{ =============================>
-" NERDTree
-
-let NERDTreeCustomOpenArgs={'file':{'where':'t'}} " Open file in new tab, doesn't work only for double-click
-let NERDTreeShowHidden=1
-" Toggle NERDTree with Tab
-nmap <Tab> :NERDTreeToggle<CR>
-let NERDTreeIgnore=['\.swp$', '\~$'] " Ignore file, ending with .swp and ~
-
-" }}} =============================<
-
-" {{{ =============================>
-" Undotree
-
-" Toggle undotree with F5
-nmap <F5> :UndotreeToggle<CR>
-
-if !exists('g:undotree_WindowLayout')
- let g:undotree_WindowLayout = 2
-endif
-
-" e.g. using 'd' instead of 'days' to save some space.
-if !exists('g:undotree_ShortIndicators')
- let g:undotree_ShortIndicators = 1
-endif
-
-" if set, let undotree window get focus after being opened, otherwise
-" focus will stay in current window.
-if !exists('g:undotree_SetFocusWhenToggle')
- let g:undotree_SetFocusWhenToggle = 1
-endif
-
-" tree node shape.
-if !exists('g:undotree_TreeNodeShape')
- let g:undotree_TreeNodeShape = '*'
-endif
-
-if !exists('g:undotree_DiffCommand')
- let g:undotree_DiffCommand = "diff"
-endif
-
-" }}} =============================<
-
-" {{{ =============================>
-" Tabman
-
-let g:tabman_toggle = '<S-Tab>'
-let g:tabman_side = 'right'
-
-" }}} =============================<
-
-" {{{ =============================>
-" Syntastic
-
-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
-
-" }}} =============================<
-
-" {{{ =============================>
-" Lighline
-
-" {{{ ------------------------->
-" Settings
-
-set laststatus=2
-
-if !has('gui_running')
- set t_Co=256
-endif
-
-let g:lightline = {
- \ 'enable': {
- \ 'statusline': 1,
- \ 'tabline': 1
- \ },
- \ 'colorscheme': 'wombat',
- \ 'active': {
- \ 'left': [ [ 'mode', 'paste' ],
- \ [ 'gitbranch', 'filename', 'charvaluehex', 'readonly', 'modified' ] ],
- \ 'right': [ [ 'lineinfo' ],
- \ [ 'fileencoding', 'filetype'] ]
- \ },
- \ 'component': {
- \ 'charvaluehex': '0x%B',
- \ },
- \ 'component_function': {
- \ 'gitbranch': 'LightlineFugitive',
- \ 'readonly': 'LightlineReadonly',
- \ 'modified': 'LightlineModified',
- \ 'filetype': 'LightlineFileType'
- \ },
- \ 'tabline': {
- \ 'right': [[]]
- \ },
- \ 'tab': {
- \ 'active': [ 'iconFilename','iconReadonly', 'iconModified' ],
- \ 'inactive': [ 'iconFilename', 'iconReadonly', 'iconModified' ]
- \ },
- \ 'tab_component_function': {
- \ 'iconFilename': 'LightlineTabFilename',
- \ 'iconReadonly': 'LightlineTabReadonly',
- \ 'iconModified': 'LightlineTabModified'
- \ },
- \ 'separator': { 'left': '', 'right': '' },
- \ 'subseparator': { 'left': '', 'right': '' },
- \ 'tabline_separator': { 'left': '▒', 'right': '' },
- \ 'tabline_subseparator': { 'left': '░' }
-\ }
-
-" }}} -------------------------<
-
-" {{{ ------------------------->
-" Function modification
-
-" Most of the following functions are just modification of source:
-" Examples from doc file - https://github.com/itchyny/lightline.vim/blob/53176a0b75d6389d775d7bce0d494e58fc654f38/doc/lightline.txt#L583
-" Tab source code - https://github.com/itchyny/lightline.vim/blob/master/autoload/lightline/tab.vim
-
-function! LightlineFugitive()
- if exists('*FugitiveHead')
- let branch = FugitiveHead()
- return branch !=# '' ? ' '.branch : ''
+" Plugin Manager {{{
+ call plug#begin('~/.vim/plugged')
+
+ Plug 'morhetz/gruvbox', {'rtp': 'vim'} " Color theme
+ Plug 'junegunn/fzf' " Used for commands like :Commits, :History, :Files
+ Plug 'junegunn/fzf.vim'
+ Plug 'preservim/nerdtree' " Browse directories (:NERDTree)
+ Plug 'Raimondi/delimitMate' " Autocomplete brackets and quotes
+ Plug 'tomtom/tcomment_vim' " Toggle comments (gc, gcc)
+ Plug 'godlygeek/tabular' " Line up text by a given character (:Tabularize /CHAR)
+ Plug 'vim-syntastic/syntastic' " Syntax error checker
+ Plug 'neoclide/coc.nvim', {'branch': 'release'} " IntelliSense practically
+ Plug 'itchyny/lightline.vim' " Statusline and tabline for Vim
+ Plug 'tpope/vim-fugitive' " git integration
+ Plug 'mbbill/undotree' " Easily interact with undo history
+ Plug 'OmniSharp/omnisharp-vim' " C# tools (autocompletion, ...)
+ Plug 'wakatime/vim-wakatime' " Time tracking via wakaime.com
+ Plug 'dense-analysis/ale' " Syntax checker via LSP
+ Plug 'ryanoasis/vim-devicons' " Icons on stuff like NERDTree
+ Plug 'honza/vim-snippets' " Ready snippets for some langauges
+ Plug 'pseewald/vim-anyfold' " Better folding
+ Plug 'editorconfig/editorconfig-vim' " Support for EditorConfig
+ Plug 'tpope/vim-eunuch' " Easy UNIX shell commands
+ Plug 'mg979/vim-visual-multi' " Multiple line cursor (and other stuff)
+ Plug 'zivyangll/git-blame.vim' " Show who last edited a line
+ Plug 'kien/tabman.vim' " Show open buffers
+ Plug 'alvan/vim-closetag' " Automatically add HTML closing tags
+ Plug 'OrangeT/vim-csharp'
+ Plug 'neovimhaskell/haskell-vim'
+ Plug 'davidhalter/jedi-vim'
+
+ call plug#end()
+" }}}
+
+" Vim-anyfold + folding {{{
+ filetype plugin indent on
+ syntax on
+ autocmd Filetype * AnyFoldActivate " activate for all filetypes
+ autocmd FileType,BufRead vim,text,sh setlocal foldmethod=marker
+ set foldlevel=99 " Open all folds by default
+ autocmd FileType,BufRead vim,sh setlocal foldlevel=0
+" }}}
+
+" General {{{
+ " Color scheme {{{
+ colorscheme gruvbox
+ set background=dark " Setting dark mode
+ let g:gruvbox_contrast_dark='medium'
+ " }}}
+
+ " Identation {{{
+ set tabstop=4 " Show tabs as 4 wide
+ set shiftwidth=4 " Indent with 4 spaces
+
+ autocmd BufRead,BufNewFile *.component.css set filetype=css
+ autocmd FileType css,ts setlocal ts=2 sw=2 sts=0 expandtab " Tranform tabs in CSS and TS into 2 spaces
+ " }}}
+
+ " Character visuals {{{
+ set list " Enabled customization of whitespace characters, so spaces, tabs, EOL, etc. (:h 'list')
+
+ " Show tabs as a | with three spaces
+ " DO NOT remove the trailing space in the next line!
+ set listchars=tab:│\
+ " }}}
+
+ " Backspace and cursor {{{
+ autocmd InsertEnter,InsertLeave * set cul! " Highlight current line, when in insert mode
+ set backspace=indent,eol,start " Better backspace functionality
+
+ set scrolloff=0 " Don't keep any screen lines above or below the cursor
+ set number " Show line numbers to the left
+ set mouse=a " Mouse support
+
+ " Thin cursor in insert mode in Gnome-Terminal (version >=3.16 ; also works with Terminator)
+ if has("autocmd")
+ au VimEnter,InsertLeave * silent execute '!echo -ne "\e[1 q"' | redraw!
+ au InsertEnter,InsertChange *
+ \ if v:insertmode == 'i' |
+ \ silent execute '!echo -ne "\e[5 q"' | redraw! |
+ \ elseif v:insertmode == 'r' |
+ \ silent execute '!echo -ne "\e[3 q"' | redraw! |
+ \ endif
+ au VimLeave * silent execute '!echo -ne "\e[ q"' | redraw!
+ endif
+ " }}}
+
+ " Ctrl bindings {{{
+ " Ctrl-Backspace deletes the previous word in insert mode.
+ noremap! <C-BS> <C-w>
+ noremap! <C-h> <C-w>
+
+ " The usual Ctrl+s, Ctrl+v type of bindings
+ " Partly taken from: https://gist.github.com/jshih/3423345
+ vmap <C-c> "+yi<Esc>
+ vmap <C-x> "+c<Esc>
+ vmap <C-v> c<ESC>"+p<Esc>
+ imap <C-v> <ESC>"+pa
+ map <C-a> ggVG
+ imap <C-z> <ESC>ui
+ imap <C-r> <ESC><C-r>i
+ "imap <C-S-z> <C-r> An impossible dream
+ imap <C-s> <ESC>:w<CR>a
+ nmap <C-S> <ESC>:w<CR>
+ map <C-f> :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>
+
+ " Use Ctrl + hjkl for navigation in insert mode
+ " inoremap <C-h> <Left>
+ " inoremap <C-j> <Down>
+ " inoremap <C-k> <Up>
+ " inoremap <C-l> <Right>
+
+ " Go between tabs with Ctrl+l (tab to the right) and Ctrl+h (tab to the left)
+ " nnoremap <C-l> :tabn<CR>
+ " nnoremap <C-h> :tabp<CR>
+ " }}}
+
+ " Comand abbreviations {{{
+ " Cyrilic (Bulgarian yawerty layout) support
+ ca в w
+ ca ва wa
+ ca ь x
+ ca ьа xa
+
+ " The following works almost the same as normal :x and :xa, but can also close running jobs (e.g. terminal windows)
+ ca x w <bar> q!
+ ca xa wa <bar> qa!
+
+ " Open a terminal vim tab with tt and open a blank tab with te
+ ca tt tab ter
+ ca te tabe
+ " }}}
+
+ " Custom app open bindings {{{
+ nnoremap <F8> :<C-u>call gitblame#echo()<CR>
+ nnoremap = :tab ter ++close lazygit<CR>
+ " }}}
+
+ " Other bindings {{{
+ " Don't get into insert mode after adding a line with o/O
+ nnoremap o o<Esc>
+ nnoremap O O<Esc>
+
+ " Move a line up and down with Alt+k and Alt-j
+ execute "set <M-j>=\ej"
+ nnoremap <M-j> <ESC>:m+1<CR>
+ execute "set <M-k>=\ek"
+ nnoremap <M-k> <ESC>:m-2<CR>
+ " }}}
+
+ " Omni complition {{{
+ " Omni completion supports C, HTML, CSS, JavaScript, PHP, Python, Ruby, SQL, XML
+ set omnifunc=syntaxcomplete#Complete " Completion for all supported languages
+
+ " Do omni completion from Ctrl+Space
+ nnoremap <C-Space> <C-X><C-O>
+ " }}} -------------------------<
+
+ " Spell check mode {{{
+ " When you press F6 it will toggle a "spell check mode",
+ " spell is activated and the colorscheme is changed
+ nmap <F6> :call SpellCheckModeToggle()<CR>
+
+ function! SpellCheckModeToggle()
+ if g:colors_name == 'gruvbox'
+ set spell
+ colorscheme darkblue
+ else
+ set nospell
+ colorscheme gruvbox
+ endif
+ endfunction
+
+ " Scrolling (shows history) in terminal (except in lazygit)
+ " Scroll up to activate it, and press a to deactivate it
+ " Slightly modified version of: https://github.com/vim/vim/issues/2490#issuecomment-393973253
+ function! ExitNormalMode()
+ unmap <buffer> <silent> <RightMouse>
+ call feedkeys("a")
+ endfunction
+
+ function! EnterNormalMode()
+ if @% == '!lazygit'
+ tunmap <silent> <ScrollWheelUp>
+ elseif &buftype == 'terminal' && mode('') == 't'
+ call feedkeys("\<c-w>N")
+ call feedkeys("\<c-y>")
+ map <buffer> <silent> <RightMouse> :call ExitNormalMode()<CR>
+ endif
+ endfunction
+
+ tmap <silent> <ScrollWheelUp> <c-w>:call EnterNormalMode()<CR>
+ " }}}
+" }}}
+
+" DelimitMate {{{
+ let delimitMate_expand_cr = 1
+ " Don't autocomplete diamond brackets in HTML (compatibility with closetag plugin)
+ autocmd FileType html let b:delimitMate_matchpairs='(:),[:],{:}'
+" }}}
+
+" NERDTree {{{
+ let NERDTreeCustomOpenArgs={'file':{'where':'t'}} " Open file in new tab, doesn't work only for double-click
+ let NERDTreeShowHidden=1
+ " Toggle NERDTree with Tab
+ nmap <Tab> :NERDTreeToggle<CR>
+ let NERDTreeIgnore=['\.swp$', '\~$'] " Ignore file, ending with .swp and ~
+" }}}
+
+" Undotree {{{
+ " Toggle undotree with F5
+ nmap <F5> :UndotreeToggle<CR>
+
+ if !exists('g:undotree_WindowLayout')
+ let g:undotree_WindowLayout = 2
endif
- return ''
-endfunction
-
-function! LightlineReadonly()
- return &ft !~? 'help\|vimfiler' && &readonly ? '' : ''
-endfunction
-
-function! LightlineModified()
- return &ft =~ 'help\|vimfiler' ? '' : &modified ? '' : &modifiable ? '' : ''
-endfunction
-
-function! LightlineFileType()
- return strlen(&filetype) ? WebDevIconsGetFileTypeSymbol() . ' ' . &filetype : ''
-endfunction
-
-" Adds the filetype icon in tabs and limit their width
-function! LightlineTabFilename(n) abort
- let buflist = tabpagebuflist(a:n)
- let winnr = tabpagewinnr(a:n)
- let _ = (expand('#'.buflist[winnr - 1].':t') !=# '' ? expand('#'.buflist[winnr - 1].':t') : '[No Name]')
-
- " Limit the width of tabs, so they don't go out of the screen
- let tabNameLengthMax = &columns/((tabpagenr('$') > 0 ? tabpagenr('$') : 0) + 5)
-
- return WebDevIconsGetFileTypeSymbol(_) . ' ' . _[0:tabNameLengthMax]
-endfunction
-
-function! LightlineTabReadonly(n) abort
- let winnr = tabpagewinnr(a:n)
- return gettabwinvar(a:n, winnr, '&readonly') ? '' : ''
-endfunction
-
-function! LightlineTabModified(n) abort
- let winnr = tabpagewinnr(a:n)
- return gettabwinvar(a:n, winnr, '&modified') ? '' : gettabwinvar(a:n, winnr, '&modifiable') ? '' : ''
-endfunction
-
-" }}} -------------------------<
-
-" }}} =============================<
-
-" {{{ =============================>
-" Ale settings
-
-let g:ale_linters = {
-\ 'cs': ['OmniSharp'],
-\}
-let b:ale_linters = ['cs']
-
-" }}} =============================<
-
-" {{{ =============================>
-" OmniSharp settings
-
-let g:syntastic_cs_checkers = ['code_checker']
-
-autocmd Filetype cs nmap <silent> <buffer> gd : OmniSharpGotoDefinition<CR>
-autocmd Filetype cs nmap <silent> <buffer> gy : OmniSharpTypeLookup<CR>
-autocmd Filetype cs nmap <silent> <buffer> gi : OmniSharpFindImplementations<CR>
-autocmd Filetype cs nmap <silent> <buffer> gr : OmniSharpFindUsages<CR>
-autocmd FileType cs nmap <silent> <buffer> <F2> : OmniSharpRename<CR>
-autocmd FileType cs nmap <silent> <buffer> ff : OmniSharpCodeFormat<CR>
-autocmd FileType cs nmap <silent> <buffer> fu : OmniSharpFixUsings<CR>
-
-" }}} =============================<
-
-" {{{ =============================>
-" haskell-vim settings
-
-let g:haskell_classic_highlighting = 1
-let g:haskell_enable_quantification = 1 " to enable highlighting of `forall`
-let g:haskell_enable_recursivedo = 1 " to enable highlighting of `mdo` and `rec`
-let g:haskell_enable_arrowsyntax = 1 " to enable highlighting of `proc`
-let g:haskell_enable_pattern_synonyms = 1 " to enable highlighting of `pattern`
-let g:haskell_enable_typeroles = 1 " to enable highlighting of type roles
-let g:haskell_enable_static_pointers = 1 " to enable highlighting of `static`
-let g:haskell_backpack = 1 " to enable highlighting of backpack keywords
-
-" }}} =============================<
-
-" {{{ =============================>
-" COC settings
-
-" All of the following is the example configuration with some values modified
-" https://github.com/neoclide/coc.nvim#example-vim-configuration
-
-" TextEdit might fail if hidden is not set.
-set hidden
-
-" Some servers have issues with backup files, see #649.
-set nobackup
-set nowritebackup
-
-" Give more space for displaying messages.
-set cmdheight=2
-
-" Having longer update time (default is 4000 ms = 4 s) leads to noticeable
-" delays and poor user experience.
-set updatetime=300
-
-" Don't pass messages to |ins-completion-menu|.
-set shortmess+=c
-
-" Always show the signcolumn, otherwise it would shift the text each time
-" diagnostics appear/become resolved.
-if has("patch-8.1.1564")
- " Recently vim can merge signcolumn and number column into one
- set signcolumn=number
-else
- set signcolumn=yes
-endif
-
-" Use tab for trigger completion with characters ahead and navigate.
-" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
-" other plugin before putting this into your config.
-inoremap <silent><expr> <TAB>
- \ pumvisible() ? "\<C-n>" :
- \ <SID>check_back_space() ? "\<TAB>" :
- \ coc#refresh()
-inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
-
-function! s:check_back_space() abort
- let col = col('.') - 1
- return !col || getline('.')[col - 1] =~# '\s'
-endfunction
-
-" Use <c-space> to trigger completion.
-if has('nvim')
- inoremap <silent><expr> <c-space> coc#refresh()
-else
- inoremap <silent><expr> <c-@> coc#refresh()
-endif
-
-" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current
-" position. Coc only does snippet and additional edit on confirm.
-" <cr> could be remapped by other vim plugin, try `:verbose imap <CR>`.
-if exists('*complete_info')
- inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>"
-else
- inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
-endif
-
-" Use `[g` and `]g` to navigate diagnostics
-" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
-nmap <silent> [g <Plug>(coc-diagnostic-prev)
-nmap <silent> ]g <Plug>(coc-diagnostic-next)
-
-" GoTo code navigation.
-nmap <silent> gd <Plug>(coc-definition)
-nmap <silent> gy <Plug>(coc-type-definition)
-nmap <silent> gi <Plug>(coc-implementation)
-nmap <silent> gr <Plug>(coc-references)
-
-" Use K to show documentation in preview window.
-nnoremap <silent> K :call <SID>show_documentation()<CR>
-
-function! s:show_documentation()
- if (index(['vim','help'], &filetype) >= 0)
- execute 'h '.expand('<cword>')
- else
- call CocAction('doHover')
- endif
-endfunction
-
-" Highlight the symbol and its references when holding the cursor.
-autocmd CursorHold * silent call CocActionAsync('highlight')
-
-" Symbol renaming.
-nmap <leader>rn <Plug>(coc-rename)
-
-" Formatting selected code.
-xmap <leader>f <Plug>(coc-format-selected)
-nmap <leader>f <Plug>(coc-format-selected)
-
-augroup mygroup
- autocmd!
- " Setup formatexpr specified filetype(s).
- autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
- " Update signature help on jump placeholder.
- autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
-augroup end
-
-" Applying codeAction to the selected region.
-" Example: `<leader>aap` for current paragraph
-xmap <leader>a <Plug>(coc-codeaction-selected)
-nmap <leader>a <Plug>(coc-codeaction-selected)
-
-" Remap keys for applying codeAction to the current buffer.
-nmap <leader>ac <Plug>(coc-codeaction)
-" Apply AutoFix to problem on the current line.
-nmap <leader>qf <Plug>(coc-fix-current)
-
-" Map function and class text objects
-" NOTE: Requires 'textDocument.documentSymbol' support from the language server.
-xmap if <Plug>(coc-funcobj-i)
-omap if <Plug>(coc-funcobj-i)
-xmap af <Plug>(coc-funcobj-a)
-omap af <Plug>(coc-funcobj-a)
-xmap ic <Plug>(coc-classobj-i)
-omap ic <Plug>(coc-classobj-i)
-xmap ac <Plug>(coc-classobj-a)
-omap ac <Plug>(coc-classobj-a)
-
-" Use CTRL-S for selections ranges.
-" Requires 'textDocument/selectionRange' support of language server.
-" nmap <silent> <C-s> <Plug>(coc-range-select)
-" xmap <silent> <C-s> <Plug>(coc-range-select)
-
-" Add `:Format` command to format current buffer.
-command! -nargs=0 Format :call CocAction('format')
-
-" Add `:Fold` command to fold current buffer.
-command! -nargs=? Fold :call CocAction('fold', <f-args>)
-
-" Add `:OR` command for organize imports of the current buffer.
-command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport')
-
-" Add (Neo)Vim's native statusline support.
-" NOTE: Please see `:h coc-status` for integrations with external plugins that
-" provide custom statusline: lightline.vim, vim-airline.
-set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
-
-" Mappings for CoCList
-" Show all diagnostics.
-nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>
-" Manage extensions.
-nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
-" Show commands.
-nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
-" Find symbol of current document.
-nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
-" Search workspace symbols.
-nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
-" Do default action for next item.
-nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
-" Do default action for previous item.
-nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
-" Resume latest coc list.
-nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
-
-" }}} =============================<
+
+ " e.g. using 'd' instead of 'days' to save some space.
+ if !exists('g:undotree_ShortIndicators')
+ let g:undotree_ShortIndicators = 1
+ endif
+
+ " if set, let undotree window get focus after being opened, otherwise
+ " focus will stay in current window.
+ if !exists('g:undotree_SetFocusWhenToggle')
+ let g:undotree_SetFocusWhenToggle = 1
+ endif
+
+ " tree node shape.
+ if !exists('g:undotree_TreeNodeShape')
+ let g:undotree_TreeNodeShape = '*'
+ endif
+
+ if !exists('g:undotree_DiffCommand')
+ let g:undotree_DiffCommand = "diff"
+ endif
+" }}}
+
+" Tabman {{{
+ let g:tabman_toggle = '<S-Tab>'
+ let g:tabman_side = 'right'
+" }}}
+
+" Syntastic {{{
+ 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
+" }}}
+
+" Lightline {{{
+ " Settings {{{
+ set laststatus=2
+
+ if !has('gui_running')
+ set t_Co=256
+ endif
+
+ let g:lightline = {
+ \ 'enable': {
+ \ 'statusline': 1,
+ \ 'tabline': 1
+ \ },
+ \ 'colorscheme': 'wombat',
+ \ 'active': {
+ \ 'left': [ [ 'mode', 'paste' ],
+ \ [ 'gitbranch', 'filename', 'charvaluehex', 'readonly', 'modified' ] ],
+ \ 'right': [ [ 'lineinfo' ],
+ \ [ 'fileencoding', 'filetype'] ]
+ \ },
+ \ 'component': {
+ \ 'charvaluehex': '0x%B',
+ \ },
+ \ 'component_function': {
+ \ 'gitbranch': 'LightlineFugitive',
+ \ 'readonly': 'LightlineReadonly',
+ \ 'modified': 'LightlineModified',
+ \ 'filetype': 'LightlineFileType'
+ \ },
+ \ 'tabline': {
+ \ 'right': [[]]
+ \ },
+ \ 'tab': {
+ \ 'active': [ 'iconFilename','iconReadonly', 'iconModified' ],
+ \ 'inactive': [ 'iconFilename', 'iconReadonly', 'iconModified' ]
+ \ },
+ \ 'tab_component_function': {
+ \ 'iconFilename': 'LightlineTabFilename',
+ \ 'iconReadonly': 'LightlineTabReadonly',
+ \ 'iconModified': 'LightlineTabModified'
+ \ },
+ \ 'separator': { 'left': '', 'right': '' },
+ \ 'subseparator': { 'left': '', 'right': '' },
+ \ 'tabline_separator': { 'left': '▒', 'right': '' },
+ \ 'tabline_subseparator': { 'left': '░' }
+ \ }
+ " }}}
+
+ " Function modification {{{
+ " Most of the following functions are just modification of source:
+ " Examples from doc file - https://github.com/itchyny/lightline.vim/blob/53176a0b75d6389d775d7bce0d494e58fc654f38/doc/lightline.txt#L583
+ " Tab source code - https://github.com/itchyny/lightline.vim/blob/master/autoload/lightline/tab.vim
+
+ function! LightlineFugitive()
+ if exists('*FugitiveHead')
+ let branch = FugitiveHead()
+ return branch !=# '' ? ' '.branch : ''
+ endif
+ return ''
+ endfunction
+
+ function! LightlineReadonly()
+ return &ft !~? 'help\|vimfiler' && &readonly ? '' : ''
+ endfunction
+
+ function! LightlineModified()
+ return &ft =~ 'help\|vimfiler' ? '' : &modified ? '' : &modifiable ? '' : ''
+ endfunction
+
+ function! LightlineFileType()
+ return strlen(&filetype) ? WebDevIconsGetFileTypeSymbol() . ' ' . &filetype : ''
+ endfunction
+
+ " Adds the filetype icon in tabs and limit their width
+ function! LightlineTabFilename(n) abort
+ let buflist = tabpagebuflist(a:n)
+ let winnr = tabpagewinnr(a:n)
+ let _ = (expand('#'.buflist[winnr - 1].':t') !=# '' ? expand('#'.buflist[winnr - 1].':t') : '[No Name]')
+
+ " Limit the width of tabs, so they don't go out of the screen
+ let tabNameLengthMax = &columns/((tabpagenr('$') > 0 ? tabpagenr('$') : 0) + 5)
+
+ return WebDevIconsGetFileTypeSymbol(_) . ' ' . _[0:tabNameLengthMax]
+ endfunction
+
+ function! LightlineTabReadonly(n) abort
+ let winnr = tabpagewinnr(a:n)
+ return gettabwinvar(a:n, winnr, '&readonly') ? '' : ''
+ endfunction
+
+ function! LightlineTabModified(n) abort
+ let winnr = tabpagewinnr(a:n)
+ return gettabwinvar(a:n, winnr, '&modified') ? '' : gettabwinvar(a:n, winnr, '&modifiable') ? '' : ''
+ endfunction
+ " }}}
+" }}}
+
+" Ale settings {{{
+ let g:ale_linters = {
+ \ 'cs': ['OmniSharp'],
+ \}
+ let b:ale_linters = ['cs']
+" }}}
+
+" OmniSharp settings {{{
+ let g:syntastic_cs_checkers = ['code_checker']
+
+ autocmd Filetype cs nmap <silent> <buffer> gd : OmniSharpGotoDefinition<CR>
+ autocmd Filetype cs nmap <silent> <buffer> gy : OmniSharpTypeLookup<CR>
+ autocmd Filetype cs nmap <silent> <buffer> gi : OmniSharpFindImplementations<CR>
+ autocmd Filetype cs nmap <silent> <buffer> gr : OmniSharpFindUsages<CR>
+ autocmd FileType cs nmap <silent> <buffer> <F2> : OmniSharpRename<CR>
+ autocmd FileType cs nmap <silent> <buffer> ff : OmniSharpCodeFormat<CR>
+ autocmd FileType cs nmap <silent> <buffer> fu : OmniSharpFixUsings<CR>
+" }}}
+
+" haskell-vim settings {{{
+ let g:haskell_classic_highlighting = 1
+ let g:haskell_enable_quantification = 1 " to enable highlighting of `forall`
+ let g:haskell_enable_recursivedo = 1 " to enable highlighting of `mdo` and `rec`
+ let g:haskell_enable_arrowsyntax = 1 " to enable highlighting of `proc`
+ let g:haskell_enable_pattern_synonyms = 1 " to enable highlighting of `pattern`
+ let g:haskell_enable_typeroles = 1 " to enable highlighting of type roles
+ let g:haskell_enable_static_pointers = 1 " to enable highlighting of `static`
+ let g:haskell_backpack = 1 " to enable highlighting of backpack keywords
+" }}}
+
+" COC settings {{{
+ " All of the following is the example configuration with some values modified
+ " https://github.com/neoclide/coc.nvim#example-vim-configuration
+
+ " TextEdit might fail if hidden is not set.
+ set hidden
+
+ " Some servers have issues with backup files, see #649.
+ set nobackup
+ set nowritebackup
+
+ " Give more space for displaying messages.
+ set cmdheight=2
+
+ " Having longer update time (default is 4000 ms = 4 s) leads to noticeable
+ " delays and poor user experience.
+ set updatetime=300
+
+ " Don't pass messages to |ins-completion-menu|.
+ set shortmess+=c
+
+ " Always show the signcolumn, otherwise it would shift the text each time
+ " diagnostics appear/become resolved.
+ if has("patch-8.1.1564")
+ " Recently vim can merge signcolumn and number column into one
+ set signcolumn=number
+ else
+ set signcolumn=yes
+ endif
+
+ " Use tab for trigger completion with characters ahead and navigate.
+ " NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
+ " other plugin before putting this into your config.
+ inoremap <silent><expr> <TAB>
+ \ pumvisible() ? "\<C-n>" :
+ \ <SID>check_back_space() ? "\<TAB>" :
+ \ coc#refresh()
+ inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
+
+ function! s:check_back_space() abort
+ let col = col('.') - 1
+ return !col || getline('.')[col - 1] =~# '\s'
+ endfunction
+
+ " Use <c-space> to trigger completion.
+ if has('nvim')
+ inoremap <silent><expr> <c-space> coc#refresh()
+ else
+ inoremap <silent><expr> <c-@> coc#refresh()
+ endif
+
+ " Use <cr> to confirm completion, `<C-g>u` means break undo chain at current
+ " position. Coc only does snippet and additional edit on confirm.
+ " <cr> could be remapped by other vim plugin, try `:verbose imap <CR>`.
+ if exists('*complete_info')
+ inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>"
+ else
+ inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
+ endif
+
+ " Use `[g` and `]g` to navigate diagnostics
+ " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list.
+ nmap <silent> [g <Plug>(coc-diagnostic-prev)
+ nmap <silent> ]g <Plug>(coc-diagnostic-next)
+
+ " GoTo code navigation.
+ nmap <silent> gd <Plug>(coc-definition)
+ nmap <silent> gy <Plug>(coc-type-definition)
+ nmap <silent> gi <Plug>(coc-implementation)
+ nmap <silent> gr <Plug>(coc-references)
+
+ " Use K to show documentation in preview window.
+ nnoremap <silent> K :call <SID>show_documentation()<CR>
+
+ function! s:show_documentation()
+ if (index(['vim','help'], &filetype) >= 0)
+ execute 'h '.expand('<cword>')
+ else
+ call CocAction('doHover')
+ endif
+ endfunction
+
+ " Highlight the symbol and its references when holding the cursor.
+ autocmd CursorHold * silent call CocActionAsync('highlight')
+
+ " Symbol renaming.
+ nmap <leader>rn <Plug>(coc-rename)
+
+ " Formatting selected code.
+ xmap <leader>f <Plug>(coc-format-selected)
+ nmap <leader>f <Plug>(coc-format-selected)
+
+ augroup mygroup
+ autocmd!
+ " Setup formatexpr specified filetype(s).
+ autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
+ " Update signature help on jump placeholder.
+ autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
+ augroup end
+
+ " Applying codeAction to the selected region.
+ " Example: `<leader>aap` for current paragraph
+ xmap <leader>a <Plug>(coc-codeaction-selected)
+ nmap <leader>a <Plug>(coc-codeaction-selected)
+
+ " Remap keys for applying codeAction to the current buffer.
+ nmap <leader>ac <Plug>(coc-codeaction)
+ " Apply AutoFix to problem on the current line.
+ nmap <leader>qf <Plug>(coc-fix-current)
+
+ " Map function and class text objects
+ " NOTE: Requires 'textDocument.documentSymbol' support from the language server.
+ xmap if <Plug>(coc-funcobj-i)
+ omap if <Plug>(coc-funcobj-i)
+ xmap af <Plug>(coc-funcobj-a)
+ omap af <Plug>(coc-funcobj-a)
+ xmap ic <Plug>(coc-classobj-i)
+ omap ic <Plug>(coc-classobj-i)
+ xmap ac <Plug>(coc-classobj-a)
+ omap ac <Plug>(coc-classobj-a)
+
+ " Use CTRL-S for selections ranges.
+ " Requires 'textDocument/selectionRange' support of language server.
+ " nmap <silent> <C-s> <Plug>(coc-range-select)
+ " xmap <silent> <C-s> <Plug>(coc-range-select)
+
+ " Add `:Format` command to format current buffer.
+ command! -nargs=0 Format :call CocAction('format')
+
+ " Add `:Fold` command to fold current buffer.
+ command! -nargs=? Fold :call CocAction('fold', <f-args>)
+
+ " Add `:OR` command for organize imports of the current buffer.
+ command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport')
+
+ " Add (Neo)Vim's native statusline support.
+ " NOTE: Please see `:h coc-status` for integrations with external plugins that
+ " provide custom statusline: lightline.vim, vim-airline.
+ set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
+
+ " Mappings for CoCList
+ " Show all diagnostics.
+ nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>
+ " Manage extensions.
+ nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
+ " Show commands.
+ nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
+ " Find symbol of current document.
+ nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
+ " Search workspace symbols.
+ nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
+ " Do default action for next item.
+ nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
+ " Do default action for previous item.
+ nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
+ " Resume latest coc list.
+ nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
+" }}}