Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VIM 34.59 KB | None | 0 0
  1. " ============================================================================
  2. " Load Plugins {{{
  3.  
  4. function! s:LoadPlugins()
  5.   call plug#begin('~/.local/share/nvim/plugged')
  6.  
  7.   " --------------------------------------------------------------------------
  8.   " UI ENCHANTMENTS
  9.   Plug 'rafi/awesome-vim-colorschemes'   " COLORSCHEMES
  10.   Plug 'ap/vim-css-color'                " CSS HIGHLIGHTE
  11.   Plug 'sheerun/vim-polyglot'            " POLYGLOT
  12.   Plug 'ryanoasis/vim-devicons'          " DEVICONS
  13.  
  14.   Plug 'vim-airline/vim-airline'         " AIRLINE
  15.   Plug 'vim-airline/vim-airline-themes'
  16.  
  17.   " --------------------------------------------------------------------------
  18.   " FEATURES
  19.   "Plug 'kassio/neoterm' check this plugin
  20.   Plug 'Chiel92/vim-autoformat'         " AUTOFORMAT
  21.   Plug 'dyng/ctrlsf.vim'                " CTRLSF
  22.   Plug 'ludovicchabant/vim-gutentags'   " GUTENTAGS
  23.   Plug 'xolox/vim-notes'                " NOTES
  24.   Plug 'airblade/vim-rooter'            " ROOTER
  25.   Plug 'markonm/traces.vim'             " TRACES
  26.   Plug 'tpope/vim-repeat'               " REPEAT
  27.   Plug 'junegunn/limelight.vim'         " LIMELIGHT
  28.   Plug 'junegunn/vim-peekaboo'          " PEEKABOO
  29.   Plug 'troydm/zoomwintab.vim'          " ZOOM WIN TAB
  30.   Plug 'machakann/vim-highlightedyank'  " HIGHLIGHTED YANK
  31.   Plug 'tyru/open-browser.vim'          " OPEN BROWSER
  32.   Plug 'kshenoy/vim-signature'          " SIGNATURE
  33.   Plug 'Valloric/ListToggle'            " LIST TOGGLE
  34.  
  35.   Plug 'SirVer/ultisnips'               " SNIPPETS
  36.   Plug 'honza/vim-snippets'
  37.  
  38.   Plug '/usr/share/vim/vimfiles'        " FZF (INSTALLED BY PACMAN)
  39.   Plug 'junegunn/fzf.vim'
  40.  
  41.   Plug 'xolox/vim-misc'                 " SESSION
  42.   Plug 'xolox/vim-session'
  43.  
  44.   "Plug 'Valloric/YouCompleteMe'        " YCM
  45.   Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
  46.   Plug 'autozimu/LanguageClient-neovim', { 'branch': 'next', 'do': 'bash install.sh' }
  47.  
  48.   Plug 'mhinz/vim-signify'              " GIT
  49.   Plug 'tpope/vim-fugitive'
  50.  
  51.   " --------------------------------------------------------------------------
  52.   " WINDOW-BASED FEATURES
  53.   Plug 'mhinz/vim-startify'          " STARTIFY
  54.   Plug 'majutsushi/tagbar'           " TAG BAR
  55.   Plug 'mbbill/undotree'             " UNDOTREE
  56.  
  57.   Plug 'scrooloose/nerdtree'         " NERDTREE
  58.   Plug 'Xuyuanp/nerdtree-git-plugin'
  59.  
  60.   " --------------------------------------------------------------------------
  61.   " MOTIONS
  62.   Plug 'romainl/vim-cool'              " COOL
  63.   Plug 'easymotion/vim-easymotion'     " EASYMOTION
  64.   Plug 'yuttie/comfortable-motion.vim' " COMFORTABLE-MOTION
  65.   Plug 'chaoren/vim-wordmotion'        " WORDMOTION
  66.  
  67.   " --------------------------------------------------------------------------
  68.   " EDITORS
  69.   Plug 'scrooloose/nerdcommenter'     " NERDCOMMENTER
  70.   Plug 'junegunn/vim-easy-align'      " EASY-ALIGN
  71.   Plug 'tpope/vim-surround'           " SURROUND
  72.   Plug 'jiangmiao/auto-pairs'         " AUTO-PAIRS
  73.   Plug 'terryma/vim-multiple-cursors' " MULTIPLE-CURSORS
  74.   Plug 'AndrewRadev/sideways.vim'     " SIDEWAYS
  75.   Plug 'tommcdo/vim-exchange'         " EXCHANGE
  76.   Plug 'kana/vim-niceblock'           " NICEBLOCK
  77.   Plug 'matze/vim-move'               " MOVE
  78.   Plug 'AndrewRadev/splitjoin.vim'    " SPLITJOIN
  79.  
  80.   " --------------------------------------------------------------------------
  81.   "TEXT OBJECT
  82.   Plug 'gcmt/wildfire.vim'       " WILDFIRE
  83.   Plug 'wellle/targets.vim'      " TARGETS
  84.   Plug 'kana/vim-textobj-user'   " TEXTOBJ USER
  85.   Plug 'kana/vim-textobj-indent' " TEXTOBJ INDENT
  86.  
  87.   call plug#end()
  88. endfunction
  89. " }}}
  90. " ============================================================================
  91.  
  92. " ============================================================================
  93. " Basic Settings {{{
  94.  
  95. function! s:BasicSettings()
  96.   " --------------------------------------------------------------------------
  97.   " options {{{
  98.  
  99.   "left column
  100.   set number
  101.   set relativenumber
  102.   "right column
  103.   "set colorcolumn=80
  104.   "search
  105.   set incsearch
  106.   set hlsearch
  107.   set ignorecase
  108.   set smartcase
  109.   "folding
  110.   set foldenable
  111.   set foldlevel=100
  112.   set foldmethod=marker
  113.   "tab
  114.   set tabstop=2
  115.   set shiftwidth=2
  116.   set smarttab
  117.   set expandtab
  118.   set smartindent
  119.   "local language
  120.   set keymap=russian-jcukenwin
  121.   set iminsert=0
  122.   set imsearch=0
  123.   "misc
  124.   set scrolloff=10
  125.   set termencoding=utf8
  126.   set showcmd
  127.   set ch=1
  128.   set mouse=a
  129.   set mousehide
  130.   set nowrap
  131.   set showmatch
  132.   set backspace=indent,eol,start
  133.   set history=200
  134.   set list
  135.   set listchars=tab:\ \ ,trail:ยท
  136.   set fillchars=fold:\ ,
  137.   set fillchars=vert:\ ,
  138.   set cursorline
  139.   set nocompatible
  140.   set backup
  141.   set backupdir=~/.nvimbk
  142.   set notimeout " for leader key etc
  143.   set noequalalways
  144.   set sessionoptions-=buffers
  145.   set completeopt-=preview
  146.   " }}}
  147.  
  148.   " --------------------------------------------------------------------------
  149.   " bindings {{{
  150.  
  151.   "leader space
  152.   let g:mapleader = ' '
  153.   map <space> <NOP>
  154.  
  155.   "movement in insert mode
  156.   inoremap <m-h> <left>
  157.   inoremap <m-l> <right>
  158.  
  159.   "separating sting
  160.   nnoremap <leader>/- :call AppendCommentLine('-')<CR>
  161.   nnoremap <leader>/= :call AppendCommentLine('=')<CR>
  162.   nnoremap <leader>/* :call AppendCommentLine('*')<CR>
  163.  
  164.   "vim
  165.   nnoremap <leader>vs :Startify<CR>
  166.   nnoremap <leader>vr :source ~/.config/nvim/init.vim<CR>
  167.  
  168.   "clipboard copy
  169.   nmap <leader>y "+y
  170.   xmap <leader>y "+y
  171.  
  172.   "primary copy
  173.   nmap <leader>Y "*y
  174.   xmap <leader>Y "*y
  175.  
  176.   "windows switching
  177.   nnoremap <silent> <leader>h :call LoadWindow()<CR>
  178.  
  179.   "misc
  180.   set pastetoggle=<F8>
  181.   map s <NOP>
  182.   nnoremap S <NOP>
  183.   map m <NOP>
  184.   map q <NOP>
  185.   nnoremap <leader>2 q
  186.   inoremap <M-j> <C-^>
  187.  
  188.   command! FilePath echo(expand("%:p"))
  189.  
  190.   "swap ' and `
  191.   nnoremap ' `
  192.  nnoremap ` '
  193.   nnoremap * g*
  194.   nnoremap g* *
  195.   nnoremap # g#
  196.   nnoremap g# #
  197.  
  198.   "useful binds
  199.   vnoremap // y/<C-R>"<CR>
  200.   nnoremap <leader>w <C-w>
  201.   nnoremap Y y$
  202.   nnoremap _ <esc>:w<CR>
  203.   nnoremap <leader>k :tab Man<CR>
  204.  
  205.   " }}}
  206.  
  207.   " --------------------------------------------------------------------------
  208.   " autocomands {{{
  209.  
  210.   "clear highlight function autoloads
  211.   augroup SetHighlightFunctionGroup
  212.     autocmd!
  213.   augroup END
  214.  
  215.   "disabling autocommenting
  216.   augroup DisablingAutocommenting
  217.     autocmd!
  218.     autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
  219.   augroup END
  220.  
  221.   "change indention to 4 spaces
  222.   augroup IdentionInCppLanguage
  223.     autocmd!
  224.     autocmd FileType cpp,c,hpp,h setlocal shiftwidth=4
  225.   augroup END
  226.  
  227.   "remap q in Man page
  228.   augroup ManPageQuit
  229.     autocmd!
  230.     autocmd FileType man nunmap <buffer> q
  231.     autocmd FileType man map <buffer> q <Plug>(easymotion-lineanywhere)
  232.     autocmd FileType man nnoremap <buffer> z :vnew \| bd # \| :q<CR>
  233.   augroup END
  234.  
  235.  
  236.   "}}}
  237.  
  238. endfunction
  239. " }}}
  240. " ============================================================================
  241.  
  242. " ============================================================================
  243. " Configure View {{{
  244. function! s:ConfigureView()
  245.   " --------------------------------------------------------------------------
  246.   " view options
  247.   set termguicolors
  248.   set background=dark
  249.  
  250.   " --------------------------------------------------------------------------
  251.   " favorite sets {{{
  252.  
  253.   let g:airline_theme='onedark'
  254.   "let g:airline_theme='behelit'
  255.   "let g:airline_theme='wombat'
  256.   "let g:airline_theme='hybrid'
  257.   "let g:airline_theme='ayu_mirage'
  258.  
  259.   colorscheme lucid
  260.   "colorscheme one
  261.   "colorscheme deus
  262.   "colorscheme wombat256mod
  263.   "colorscheme apprentice
  264.   "colorscheme space-vim-dark
  265.   "colorscheme minimalist
  266.   "colorscheme molokai
  267.   "colorscheme dracula
  268.  
  269.   " }}}
  270.  
  271.   " --------------------------------------------------------------------------
  272.   " highlight colors {{{
  273.   "CursorLine
  274.   call s:SetHighlight("CursorLine",   { 'bg': '#232323'})
  275.   call s:SetHighlight("CursorLineNr", { 'mode': 'bold', 'fg': '#7bc992', 'bg': '#191919'})
  276.  
  277.   "Msg
  278.   call s:SetHighlight("ErrorMsg",     { 'mode': 'bold', 'bg': '#000000', 'fg': '#ff5555'})
  279.   call s:SetHighlight("WarningMsg",   { 'mode': 'bold', 'bg': '#101010', 'fg': '#ff79c6'})
  280.  
  281.   "Pmenu
  282.   call s:SetHighlight("Pmenu",        { 'bg': '#103030', 'fg': '7bc992'})
  283.   call s:SetHighlight("PmenuSel",     { 'bg': 'black', 'fg': '#55ff88'})
  284.  
  285.   "Diffs
  286.   call s:SetHighlight("DiffAdd",      { 'fg': '#55ff55'})
  287.   call s:SetHighlight("DiffDelete",   { 'fg': '#ff5555'})
  288.   call s:SetHighlight("DiffChange",   { 'fg': '#ff9955'})
  289.  
  290.   "Signs
  291.   call s:SetHighlight('ErrorSign',       {'mode': 'bold', 'bg': '#101010', 'fg': '#f43753'})
  292.   call s:SetHighlight('WarningSing',     {'mode': 'bold', 'bg': '#101010', 'fg': '#f4f453'})
  293.   call s:SetHighlight('InformationSign', {'mode': 'bold', 'bg': '#101010', 'fg': '#67f473'})
  294.   call s:SetHighlight('HintSing',        {'mode': 'bold', 'bg': '#101010', 'fg': '#f484f4'})
  295.  
  296.   "Folded
  297.   call s:SetHighlight("Folded",       { 'bg': '#302737'})
  298.  
  299.   "Left column
  300.   call s:SetHighlight("ColorColumn",       { 'bg': '#232323'})
  301.   call s:SetHighlight("VertSplit",       { 'bg': '#3E4550'})
  302.  
  303.   "Directory
  304.   "call s:SetHighlight("Directory",   { 'fg': '#7bc992'})
  305.   " }}}
  306.  
  307. endfunction
  308. " }}}
  309. " ============================================================================
  310.  
  311. " ============================================================================
  312. " Configure Plugins {{{
  313.  
  314. function! s:ConfigurePlugins()
  315.  
  316.   " **************************************************************************
  317.   " UI ENCHANTMENTS
  318.  
  319.   " --------------------------------------------------------------------------
  320.   " devicons
  321.   let g:WebDevIconsNerdTreeGitPluginForceVAlign = 0
  322.   let g:WebDevIconsUnicodeDecorateFolderNodes = 1
  323.   let g:DevIconsEnableFoldersOpenClose = 1
  324.   let g:DevIconsEnableFolderExtensionPatternMatching = 1
  325.  
  326.   " --------------------------------------------------------------------------
  327.   " airline
  328.   let g:airline#extensions#disable_rtp_load = 1
  329.   let g:airline_extensions = ['tabline', 'branch', 'ycm', 'quickfix', 'tagbar', 'gutentags', 'undotree']
  330.  
  331.   let g:airline_highlighting_cache = 1
  332.   let g:airline_inactive_collapse = 0
  333.   let g:airline_powerline_fonts = 1
  334.  
  335.   let g:airline#extensions#ctrlp#color_template = 'visual'
  336.   let g:airline#extensions#ctrlp#show_adjacent_modes = 0
  337.  
  338.   let g:airline#extensions#tabline#enabled = 1
  339.   let g:airline#extensions#tabline#show_buffers = 0
  340.   let g:airline#extensions#tabline#show_tabs = 1
  341.   let g:airline#extensions#tabline#show_splits = 0
  342.   let g:airline#extensions#tabline#show_close_button = 0
  343.   let g:airline#extensions#tabline#tab_nr_type = 1
  344.   let g:airline#extensions#tabline#fnamemod = ':t'
  345.   "let g:airline#extensions#tabline#tab_min_count = 2
  346.  
  347.   function! AirlineInit()
  348.     let g:airline_section_b = airline#section#create(['branch'])
  349.     let g:airline_section_c = '%t%m'
  350.     let g:airline_section_z = '%#__accent_bold#%p%% %l/%L%#__restore__#'
  351.   endfunction
  352.   augroup AAInit
  353.     autocmd!
  354.     autocmd User AirlineAfterInit call AirlineInit()
  355.   augroup END
  356.  
  357.  
  358.   " **************************************************************************
  359.   " FEATURES
  360.  
  361.   " --------------------------------------------------------------------------
  362.   " terminal
  363.  
  364.   tnoremap <silent> <C-o> <C-\><C-n>
  365.  
  366.   " toggle
  367.   nnoremap <silent> <F1> :call TerminalToggle()<CR>
  368.   tnoremap <silent> <F1> <C-\><C-n>:call TerminalToggle()<CR>
  369.   nnoremap <silent> <F13> :call SwitchWindowTo("Terminal")<CR>
  370.   tnoremap <silent> <F13> <C-\><C-n>:call SwitchWindowTo("Terminal")<CR>
  371.  
  372.   "insert mode in terminal by default
  373.   augroup TerminalInsertMode
  374.     autocmd!
  375.     "autocmd BufEnter * if &buftype == 'terminal' | :startinsert | endif
  376.     autocmd BufWinEnter,WinEnter Terminal startinsert
  377.     autocmd BufLeave Terminal stopinsert
  378.   augroup END
  379.  
  380.  
  381.   " --------------------------------------------------------------------------
  382.   " autoformat
  383.   noremap <Leader>j :Autoformat<CR>
  384.  
  385.   " --------------------------------------------------------------------------
  386.   " ctrlsf
  387.   let g:ctrlsf_auto_focus = {"at" : "start"}
  388.   let g:ctrlsf_context = '-A 5 -B 2'
  389.   "let g:ctrlsf_default_root = 'project+fw'
  390.   let g:ctrlsf_populate_qflist = 1
  391.   let g:ctrlsf_default_view_mode = 'normal'
  392.   let g:ctrlsf_position = 'left'
  393.   let g:ctrlsf_winsize = '70'
  394.   let g:ctrlsf_indent = 2
  395.   let g:ctrlsf_mapping = {
  396.         \ "split"   : "<C-s>",
  397.         \ "vsplit"  : "<C-v>",
  398.         \ }
  399.  
  400.   nmap <Leader>i <Plug>CtrlSFCwordExec
  401.   nmap <Leader>e <Plug>CtrlSFCCwordExec
  402.   vmap <Leader>i <Plug>CtrlSFVwordExec
  403.  
  404.   " --------------------------------------------------------------------------
  405.   " gutentags
  406.   let g:gutentags_exclude_project_root = ['/home/vlad']
  407.   let g:gutentags_add_default_project_roots = 0
  408.   let g:gutentags_project_root = ['.git', '.gutMark']
  409.   let g:gutentags_cache_dir = '~/.local/share/nvim/tags'
  410.   let g:gutentags_file_list_command = 'fd --hidden --no-ignore --type file'
  411.  
  412.   " --------------------------------------------------------------------------
  413.   " notes
  414.   let g:notes_directories = ['~/.local/share/nvim/notes']
  415.   let g:notes_title_sync = 'rename_file'
  416.  
  417.   " --------------------------------------------------------------------------
  418.   " rooter
  419.   let g:rooter_silent_chdir = 1
  420.   let g:rooter_patterns = ['.git/', '.git', '_darcs/', '.hg/', '.bzr/', '.svn/']
  421.  
  422.   " --------------------------------------------------------------------------
  423.   " limelight
  424.   let g:limelight_conceal_guifg = '#446666'
  425.   let g:limelight_paragraph_span = 2
  426.   nnoremap <Leader>fl :Limelight!!<CR>
  427.  
  428.   " --------------------------------------------------------------------------
  429.   " peekaboo
  430.   let g:peekaboo_window = "vert bo 50new"
  431.  
  432.   " --------------------------------------------------------------------------
  433.   " zoomwintab
  434.   nnoremap <Leader>wo :ZoomWinTabToggle<CR>
  435.  
  436.   " --------------------------------------------------------------------------
  437.   " highlightedyank
  438.   let g:highlightedyank_highlight_duration = 200
  439.  
  440.   " --------------------------------------------------------------------------
  441.   " open-browser
  442.   nmap gx <Plug>(openbrowser-smart-search)
  443.   vmap gx <Plug>(openbrowser-smart-search)
  444.  
  445.   " --------------------------------------------------------------------------
  446.   " signature
  447.   call s:SetHighlight('MySignatureMarkText',   { 'fg': '#b895ff'})
  448.   call s:SetHighlight('MySignatureMarkerText',   { 'fg': '#ff4a33'})
  449.   let g:SignatureMarkTextHL = 'MySignatureMarkText'
  450.   let g:SignatureMarkerTextHL = 'MySignatureMarkerText'
  451.   let g:SignatureMap = {
  452.         \ 'Leader'             :  "<Leader>m",
  453.         \ 'DeleteMark'         :  "d<Leader>m",
  454.         \ 'ListBufferMarks'    :  "<Leader>m/",
  455.         \ 'ListBufferMarkers'  :  "<Leader>m?",
  456.         \ 'GotoNextMarker'     :  "m>",
  457.         \ 'GotoPrevMarker'     :  "m<",
  458.         \ 'GotoNextMarkerAny'  :  "m]",
  459.         \ 'GotoPrevMarkerAny'  :  "m["
  460.         \ }
  461.  
  462.   " --------------------------------------------------------------------------
  463.   " ultisnips
  464.   let g:UltiSnipsUsePythonVersion = 3
  465.   let g:UltiSnipsEditSplit = 'vertical'
  466.   let g:UltiSnipsSnippetsDir ='/home/vlad/.local/share/nvim/pSnips'
  467.   let g:UltiSnipsSnippetDirectories = ["UltiSnips", "/home/vlad/.local/share/nvim/pSnips"]
  468.  
  469.   let g:UltiSnipsListSnippets = '<c-=>'
  470.   let g:UltiSnipsExpandTrigger = '<c-j>'
  471.   let g:UltiSnipsJumpForwardTrigger = '<c-j>'
  472.   let g:UltiSnipsJumpBackwardTrigger = '<c-k>'
  473.  
  474.   xnoremap  <c-j> :call UltiSnips#SaveLastVisualSelection()<CR>gvs
  475.  
  476.   " temporary workaround(LanguageClient - deoplete - UltiSnips)
  477.   " check https://github.com/autozimu/LanguageClient-neovim/issues/379
  478.   function! ExpandLspSnippet()
  479.     call UltiSnips#ExpandSnippetOrJump()
  480.     if !pumvisible() || empty(v:completed_item)
  481.       return ''
  482.     endif
  483.  
  484.     " only expand Lsp if UltiSnips#ExpandSnippetOrJump not effect.
  485.     let l:value = v:completed_item['word']
  486.     let l:matched = len(l:value)
  487.     if l:matched <= 0
  488.       return ''
  489.     endif
  490.  
  491.     " remove inserted chars before expand snippet
  492.     if col('.') == col('$')
  493.       let l:matched -= 1
  494.       exec 'normal! ' . l:matched . 'Xx'
  495.     else
  496.       exec 'normal! ' . l:matched . 'X'
  497.     endif
  498.  
  499.     if col('.') == col('$') - 1
  500.       " move to $ if at the end of line.
  501.       call cursor(line('.'), col('$'))
  502.     endif
  503.  
  504.     " expand snippet now.
  505.     call UltiSnips#Anon(l:value)
  506.     return ''
  507.   endfunction
  508.   imap <C-e> <C-R>=ExpandLspSnippet()<CR>
  509.  
  510.   " --------------------------------------------------------------------------
  511.   " fzf
  512.   " options {{{
  513.   let $FZF_DEFAULT_OPTS = '--multi --no-mouse --inline-info'
  514.   let $FZF_DEFAULT_COMMAND = 'fd --hidden --no-ignore-vcs --exclude .git/ --type file'
  515.  
  516.   let g:fzf_action = {
  517.         \ 'ctrl-t': 'tab split',
  518.         \ 'ctrl-s': 'split',
  519.         \ 'ctrl-v': 'vsplit' }
  520.   let g:fzf_layout = { 'down': '30%' }
  521.   let g:fzf_history_dir = '~/.local/share/fzf-history'
  522.   let g:fzf_command_prefix='Fzf'
  523.  
  524.   "autoclose statusline
  525.   augroup CustomFzfView
  526.     autocmd!
  527.     autocmd  FileType fzf set laststatus=0 noshowmode relativenumber!
  528.     autocmd  FileType fzf autocmd BufLeave <buffer> set laststatus=2 showmode relativenumber
  529.   augroup END
  530.   " }}}
  531.  
  532.   " highlights {{{
  533.   let g:fzf_colors =
  534.         \ { 'fg'      : ['fg', 'FzfFg'      ] ,
  535.         \ 'bg'      : ['fg', 'FzfBg'      ] ,
  536.         \ 'hl'      : ['fg', 'FzfHl'      ] ,
  537.         \ 'fg+'     : ['bg', 'FzfFg'      ] ,
  538.         \ 'bg+'     : ['bg', 'FzfBg'      ] ,
  539.         \ 'hl+'     : ['bg', 'FzfHl'      ] ,
  540.         \ 'info'    : ['fg', 'FzfInfo'    ] ,
  541.         \ 'border'  : ['fg', 'FzfBorder'  ] ,
  542.         \ 'prompt'  : ['fg', 'FzfPrompt'  ] ,
  543.         \ 'pointer' : ['fg', 'FzfPointer' ] ,
  544.         \ 'marker'  : ['fg', 'FzfMarker'  ] ,
  545.         \ 'spinner' : ['fg', 'FzfSpiner'  ] ,
  546.         \ 'header'  : ['fg', 'FzfHeader'  ] }
  547.   call s:SetHighlight('FzfFg', {'fg': '#3fc997', 'bg': '#00ffff'})
  548.   call s:SetHighlight('FzfBg', {'fg': '#000000', 'bg': '#161616'})
  549.   call s:SetHighlight('FzfHl', {'fg': '#db0088', 'bg': '#ff0000'})
  550.  
  551.   call s:SetHighlight('FzfInfo'   , {'fg': '#d0ffc3'})
  552.   call s:SetHighlight('FzfBorder' , {'fg': '#ffffff'})
  553.   call s:SetHighlight('FzfPrompt' , {'fg': '#b3e4eb'})
  554.   call s:SetHighlight('FzfPointer', {'fg': '#00ffff'})
  555.   call s:SetHighlight('FzfMarker' , {'fg': '#ff0000'})
  556.   call s:SetHighlight('FzfSpiner' , {'fg': '#d0ffc3'})
  557.   call s:SetHighlight('FzfHeader' , {'fg': '#ffffff'})
  558.   " }}}
  559.  
  560.   " bindings {{{
  561.   nmap <m-m> <plug>(fzf-maps-n)
  562.   xmap <m-m> <plug>(fzf-maps-x)
  563.   omap <m-m> <plug>(fzf-maps-o)
  564.   imap <m-m> <plug>(fzf-maps-i)
  565.  
  566.   inoremap <expr> <c-f>p fzf#vim#complete#path("fd --no-ignore --hidden --type directory")
  567.   inoremap <expr> <c-f>f fzf#vim#complete#path("fd --no-ignore --hidden --type file")
  568.   imap <c-f>l <plug>(fzf-complete-line)
  569.   imap <c-f>b <plug>(fzf-complete-buffer-line)
  570.  
  571.   "open file
  572.   nnoremap <expr> <Leader>of (expand('%') =~ 'NERD_tree' ? "\<c-w>\<c-w>" : '').":FzfFiles\<CR>"
  573.   nnoremap <silent> <expr> <leader>od ":FzfFiles ".(expand('%:p:h'))."\<CR>"
  574.   nnoremap <leader>ov :FzfFiles ~/.local/share/nvim<CR>
  575.   nnoremap <leader>og :FzfGFiles<CR>
  576.   nnoremap <leader>oc :FzfGFiles?<CR>| "changed
  577.   nnoremap <leader>ob :FzfBuffers<CR>
  578.   nnoremap <leader>ol :FzfLines<CR>
  579.   nnoremap <leader>ot :FzfTags<CR>
  580.   nnoremap <leader>oz :FzfMarks<CR>
  581.   nnoremap <leader>ow :FzfWindows<CR>
  582.   nnoremap <leader>om :FzfHistory<CR>| "mru
  583.   "buffer local select
  584.   nnoremap <leader>bl :FzfBLines<CR>
  585.   nnoremap <leader>bt :FzfBTags<CR>
  586.   "select other
  587.   nnoremap <leader>st :FzfColors<CR>| "theme
  588.   nnoremap <leader>s: :FzfHistory:<CR>
  589.   nnoremap <leader>s/ :FzfHistory/<CR>
  590.   nnoremap <leader>ss :FzfSnippets<CR>
  591.   nnoremap <leader>sc :FzfCommands<CR>
  592.   nnoremap <leader>sh :FzfHelptags<CR>
  593.   "later
  594.   "nnoremap <leader>oc :FzfCommits<CR>
  595.   "nnoremap <leader>oC :FzfBCommits<CR>
  596.   " }}}
  597.  
  598.  
  599.   " --------------------------------------------------------------------------
  600.   " session
  601.   let g:session_directory = '~/.local/share/nvim/sessions/'
  602.   let g:session_default_overwrite = 1
  603.   let g:session_autoload = 'no'
  604.   let g:session_autosave = 'yes'
  605.   let g:session_autosave_periodic = 5
  606.   let g:session_autosave_silent = 1
  607.   let g:session_persist_font = 0
  608.   let g:session_persist_colors = 0
  609.   let g:session_command_aliases = 1
  610.  
  611.   " --------------------------------------------------------------------------
  612.   " lsp
  613.   let g:LanguageClient_serverCommands = {
  614.         \ 'cpp': ['cquery', '--log-file=/tmp/cq.log'],
  615.         \ 'c': ['cquery', '--log-file=/tmp/cq.log'],
  616.         \ 'rust': ['rustup', 'run', 'nightly', 'rls'],
  617.         \ }
  618.   let g:LanguageClient_rootMarkers = {
  619.         \ 'cpp': ['compile_commands.json']
  620.         \ }
  621.   let g:LanguageClient_diagnosticsDisplay = { 1: { }, 2: { }, 3: { }, 4: { }, }
  622.   let g:LanguageClient_diagnosticsDisplay[1]['signTexthl'] = "ErrorSign"
  623.   let g:LanguageClient_diagnosticsDisplay[2]['signTexthl'] = "WarningSing"
  624.   let g:LanguageClient_diagnosticsDisplay[3]['signTexthl'] = "InformationSign"
  625.   let g:LanguageClient_diagnosticsDisplay[4]['signTexthl'] = "HintSing"
  626.  
  627.   let g:LanguageClient_loadSettings = 1
  628.   let g:LanguageClient_settingsPath = '~/.config/nvim/settings.json'
  629.   let g:LanguageClient_loggingFile = "/tmp/LanguageClient.log"
  630.   let g:LanguageClient_windowLogMessageLevel = "Error"
  631.   set completefunc=LanguageClient#complete
  632.   set formatexpr=LanguageClient_textDocument_rangeFormatting()
  633.  
  634.   function! SetLSPHotkeys()
  635.     nnoremap <buffer> <silent> gh :call LanguageClient#textDocument_hover()<CR>
  636.     nnoremap <buffer> <silent> gd :call LanguageClient#textDocument_definition()<CR>
  637.     nnoremap <buffer> <silent> gr :call LanguageClient#textDocument_references()<CR>
  638.     nnoremap <buffer> <silent> gs :call LanguageClient#textDocument_documentSymbol()<CR>
  639.     nnoremap <buffer> <silent> gn :call LanguageClient#textDocument_rename()<CR>
  640.     nnoremap <buffer> <silent> gm :call LanguageClient_contextMenu()<CR>
  641.   endfunction
  642.  
  643.   augroup LSPHotkeysForFiles
  644.     autocmd!
  645.     autocmd FileType cpp,hpp,c,h,rust call SetLSPHotkeys()
  646.   augroup END
  647.  
  648.   " --------------------------------------------------------------------------
  649.   " deoplete
  650.   let g:deoplete#enable_at_startup = 1
  651.   call deoplete#custom#source('_', 'max_menu_width', 90)
  652.  
  653.   " --------------------------------------------------------------------------
  654.   "signify
  655.   let g:signify_vcs_list = ['git']
  656.   let g:signify_sign_delete = '-'
  657.  
  658.   nmap mj <plug>(signify-next-hunk)
  659.   nmap mk <plug>(signify-prev-hunk)
  660.  
  661.   augroup SignifyRefresh "update without saving
  662.     autocmd!
  663.     autocmd CursorHold * SignifyRefresh
  664.     autocmd CursorHoldI * SignifyRefresh
  665.     autocmd FocusGained * SignifyRefresh
  666.   augroup END
  667.  
  668.  
  669.   " **************************************************************************
  670.   " WINDOW-BASED FEATURES
  671.  
  672.   " --------------------------------------------------------------------------
  673.   " startify
  674.   let g:startify_change_to_vcs_root = 1
  675.   let g:startify_update_oldfiles = 1
  676.   let g:startify_fortune_use_unicode = 1
  677.   let g:startify_padding_left = 8
  678.   let g:startify_session_dir = '~/.local/share/nvim/sessions/'
  679.   let g:startify_session_persistence = 1
  680.   let g:startify_session_sort = 1
  681.  
  682.   let g:startify_bookmarks = [
  683.         \ {'c': '~/configuration/nvim/init.vim'},
  684.         \ {'z': '~/configuration/terminal/zshrc'},
  685.         \ {'i': '~/configuration/desktop/i3/config_template'},
  686.         \ {'b': '~/configuration/desktop/i3blocks/config_template'}
  687.         \ ]
  688.  
  689.   let g:startify_lists = [
  690.         \ { 'type':'sessions',  'header': ['Sessions']       },
  691.         \ { 'type':'bookmarks', 'header': ['Bookmarks']      },
  692.         \ { 'type':'files',     'header': ['MRU']            },
  693.         \ { 'type':'dir',       'header': ['MRU '. getcwd()] }
  694.         \ ]
  695.  
  696.   let g:startify_session_before_save = [
  697.         \ 'silent! NERDTreeClose',
  698.         \ 'silent! TagbarClose'
  699.         \ ]
  700.  
  701.   " --------------------------------------------------------------------------
  702.   " tagbar
  703.   let g:tagbar_width = 30
  704.   let g:tagbar_zoomwidth = 100
  705.   let g:tagbar_hide_nonpublic = 1
  706.   let g:tagbar_silent = 1
  707.   let g:tagbar_map_showproto = "t" "remap showproto from <Space> to t
  708.   let g:tagbar_autoshowtag = 1
  709.   let g:tagbar_autofocus = 0
  710.   nnoremap <silent> <F2> :TagbarToggle<CR>
  711.   nnoremap <silent> <F14> :call SwitchWindowTo("__Tagbar__.*")<CR>
  712.  
  713.   " --------------------------------------------------------------------------
  714.   " undotree
  715.   nnoremap <silent> <F4> :UndotreeToggle<CR>
  716.   nnoremap <silent> <F16> :call SwitchWindowTo("undotree_*")<CR>
  717.   let g:undotree_CustomUndotreeCmd  = 'topleft vertical 30 new'
  718.   let g:undotree_CustomDiffpanelCmd = 'botright 7 new'
  719.   let g:undotree_RelativeTimestamp = 1
  720.   let g:undotree_ShortIndicators = 1
  721.   let g:undotree_HelpLine = 0
  722.  
  723.   " --------------------------------------------------------------------------
  724.   " nerdtree
  725.   let g:NERDTreeStatusline = 'Nerdtree'
  726.   let g:NERDTreeMapOpenSplit = 's'
  727.   let g:NERDTreeMapPreviewSplit = 'gs'
  728.   let g:NERDTreeMapOpenVSplit = 'v'
  729.   let g:NERDTreeMapPreviewVSplit = 'gv'
  730.   let g:NERDTreeMapMenu = 'a'
  731.   let g:NERDTreeWinSize = '29'
  732.   nnoremap <silent> <F3> :call NerdtreeToggle()<CR>
  733.   nnoremap <silent> <F15> :call SwitchWindowTo("NERD_tree_*")<CR>
  734.   nnoremap <silent> <leader>n :NERDTree<CR>
  735.  
  736.   "my theme fix
  737.   augroup SetHighlightFunctionGroup
  738.     autocmd ColorScheme * highlight link NERDTreeDir Directory
  739.   augroup END
  740.  
  741.  
  742.   " **************************************************************************
  743.   " MOTIONS
  744.  
  745.   " --------------------------------------------------------------------------
  746.   " easymotion
  747.   let g:EasyMotion_do_mapping = 0
  748.   let g:EasyMotion_smartcase = 1
  749.   let g:EasyMotion_use_smartsign_us = 1
  750.   let g:EasyMotion_use_upper = 1
  751.   let g:EasyMotion_keys = 'ASDGHKLQWERTYUIOPZXCVBNMFJ;'
  752.   let g:EasyMotion_space_jump_first = 1
  753.  
  754.   map q <Plug>(easymotion-lineanywhere)
  755.  
  756.   nmap ss <Plug>(easymotion-overwin-f2)
  757.   omap ss <Plug>(easymotion-s2)
  758.   xmap ss <Plug>(easymotion-s2)
  759.   map \ <Plug>(easymotion-sn)
  760.   map sf <Plug>(easymotion-f)
  761.   map sF <Plug>(easymotion-F)
  762.   map st <Plug>(easymotion-t)
  763.   map sT <Plug>(easymotion-T)
  764.   map sw <Plug>(easymotion-w)
  765.   map sW <Plug>(easymotion-W)
  766.   map sb <Plug>(easymotion-b)
  767.   map sB <Plug>(easymotion-B)
  768.   map se <Plug>(easymotion-e)
  769.   map sE <Plug>(easymotion-E)
  770.   map sg <Plug>(easymotion-ge)
  771.   map sG <Plug>(easymotion-gE)
  772.  
  773.   map sj <Plug>(easymotion-j)
  774.   map sk <Plug>(easymotion-k)
  775.   map sJ <Plug>(easymotion-eol-j)
  776.   map sK <Plug>(easymotion-eol-k)
  777.   nmap sl <Plug>(easymotion-overwin-line)
  778.   omap sl <Plug>(easymotion-bd-jk)
  779.   xmap sl <Plug>(easymotion-bd-jk)
  780.   nmap so <Plug>(easymotion-overwin-w)
  781.   omap so <Plug>(easymotion-bd-w)
  782.   xmap so <Plug>(easymotion-bd-w)
  783.   nmap S <Plug>(easymotion-overwin-f)
  784.   omap sO <Plug>(easymotion-bd-f)
  785.   xmap sO <Plug>(easymotion-bd-f)
  786.   map sn <Plug>(easymotion-next)
  787.   map sp <Plug>(easymotion-prev)
  788.   map s/ <Plug>(easymotion-bd-n)
  789.   map sr <Plug>(easymotion-repeat)
  790.  
  791.   " --------------------------------------------------------------------------
  792.   " comfortable-motion
  793.   let g:comfortable_motion_no_default_key_mappings = 1
  794.   let g:comfortable_motion_interval = 1000.0 / 60
  795.  
  796.   let g:comfortable_motion_friction = 80.0
  797.   let g:comfortable_motion_air_drag = 6.5
  798.  
  799.   let g:cm_impulse = 4
  800.  
  801.   nnoremap <silent> <C-e> :call comfortable_motion#flick(g:cm_impulse * winheight(0) *  0.3 )<CR>
  802.   nnoremap <silent> <C-y> :call comfortable_motion#flick(g:cm_impulse * winheight(0) * -0.3 )<CR>
  803.   nnoremap <silent> <C-d> :call comfortable_motion#flick(g:cm_impulse * winheight(0) *    1 )<CR>
  804.   nnoremap <silent> <C-u> :call comfortable_motion#flick(g:cm_impulse * winheight(0) *   -1 )<CR>
  805.   nnoremap <silent> <C-f> :call comfortable_motion#flick(g:cm_impulse * winheight(0) *  1.8 )<CR>
  806.   nnoremap <silent> <C-b> :call comfortable_motion#flick(g:cm_impulse * winheight(0) * -1.8 )<CR>
  807.  
  808.   " --------------------------------------------------------------------------
  809.   " wordmotion
  810.   let g:wordmotion_mappings = {
  811.         \ 'w'         :'mw',
  812.         \ 'b'         :'mb',
  813.         \ 'e'         :'me',
  814.         \ 'ge'        :'mge',
  815.         \ 'aw'        :'amw',
  816.         \ 'iw'        :'imw',
  817.         \ '<C-R><C-W>':'<C-R><C-W>'
  818.         \ }
  819.  
  820.   " **************************************************************************
  821.   " EDITORS
  822.  
  823.   " --------------------------------------------------------------------------
  824.   " nerdcommenter
  825.   let g:NERDRemoveExtraSpaces = 1
  826.   let g:NERDTrimTrailingWhitespace = 1
  827.   let g:NERDCompactSexyComs = 1
  828.   let g:NERDToggleCheckAllLines = 1
  829.  
  830.   " --------------------------------------------------------------------------
  831.   " easy-align
  832.   nmap ga <Plug>(EasyAlign)
  833.   xmap ga <Plug>(EasyAlign)
  834.  
  835.   nmap gl <Plug>(LiveEasyAlign)
  836.   xmap n <Plug>(LiveEasyAlign)
  837.  
  838.   " --------------------------------------------------------------------------
  839.   " auto-pairs
  840.   let g:AutoPairsShortcutJump = '<M-q>'
  841.  
  842.   " --------------------------------------------------------------------------
  843.   " sideways
  844.   let b:sideways_skip_syntax = []
  845.   nnoremap <silent> <Leader>, :SidewaysLeft<cr>
  846.   nnoremap <silent> <Leader>. :SidewaysRight<cr>
  847.  
  848.   omap aa <Plug>SidewaysArgumentTextobjA
  849.   xmap aa <Plug>SidewaysArgumentTextobjA
  850.   omap ia <Plug>SidewaysArgumentTextobjI
  851.   xmap ia <Plug>SidewaysArgumentTextobjI
  852.  
  853.   " --------------------------------------------------------------------------
  854.   " exchange
  855.   let g:exchange_no_mappings = 1
  856.   xmap x <Plug>(Exchange)
  857.   nmap cx <Plug>(Exchange)
  858.   nmap cxc <Plug>(ExchangeClear)
  859.   nmap cxl <Plug>(ExchangeLine)
  860.  
  861.   " --------------------------------------------------------------------------
  862.   " niceblock
  863.   let g:niceblock_no_default_key_mappings = 1
  864.   xmap gI <Plug>(niceblock-I)
  865.   xmap gi <Plug>(niceblock-gI)
  866.   xmap gA <Plug>(niceblock-A)
  867.  
  868.   " --------------------------------------------------------------------------
  869.   " splitjoin
  870.   let g:splitjoin_join_mapping = 'gj'
  871.   let g:splitjoin_split_mapping = 'gk'
  872.  
  873.  
  874.   " **************************************************************************
  875.   "TEXT OBJECT
  876.  
  877.   " wildfire
  878.   let g:wildfire_objects = ["i'", 'i"', "i)", "i]", "i}", "ip", "it", "i>"]
  879.  
  880.   " textobj indent
  881.   let g:textobj_indent_no_default_key_mappings = 1
  882.   xmap gn <Plug>(textobj-indent-i)
  883.   xmap gN <Plug>(textobj-indent-a)
  884.   xmap gc <Plug>(textobj-indent-same-i)
  885.   xmap gC <Plug>(textobj-indent-same-a)
  886.  
  887.   call plug#end()
  888. endfunction
  889. " }}}
  890. " ============================================================================
  891.  
  892. " ============================================================================
  893. " Util Functions {{{
  894.  
  895. " ----------------------------------------------------------------------------
  896. " Highlight
  897. function! s:SetHighlight(hlName, hl)
  898.   let l:mode = get(a:hl, 'mode', 'none')
  899.   let l:fg = get(a:hl, 'fg', 'none')
  900.   let l:bg = get(a:hl, 'bg', 'none')
  901.   execute "highlight ".a:hlName." gui=".l:mode." guifg=".l:fg." guibg=".l:bg
  902.   augroup SetHighlightFunctionGroup
  903.     execute "autocmd ColorScheme * highlight ".a:hlName." gui=".l:mode." guifg=".l:fg." guibg=".l:bg
  904.   augroup END
  905. endfunction
  906.  
  907. " ----------------------------------------------------------------------------
  908. " Comment line
  909. function! AppendCommentLine(placeholder)
  910.   "line width
  911.   let l:text_width = &textwidth> 0? &textwidth : 80
  912.  
  913.   "widths
  914.   let l:indent_width = indent(line('.'))
  915.   let l:comment_string_width = len(substitute(&commentstring, '%s', '', '',))
  916.   let l:placeholder_width = l:text_width - l:indent_width - l:comment_string_width - len(' ')
  917.  
  918.   "parts
  919.   let l:indent_part = repeat(' ', l:indent_width)
  920.   let l:placeholder_part = repeat(a:placeholder, l:placeholder_width)
  921.  
  922.   "line
  923.   let l:line = l:indent_part . substitute(&commentstring, '%s', ' ' . l:placeholder_part, '')
  924.   call append(line('.'), l:line)
  925. endfunction
  926.  
  927. " ----------------------------------------------------------------------------
  928. " Save/Load window
  929. function! s:CheckNormalWindow(window_number)
  930.   let l:buf = winbufnr(a:window_number)
  931.   if l:buf == -1 | return 0 | endif
  932.   if buflisted(l:buf) == 0 | return 0 | endif
  933.   if empty(getbufvar(l:buf, "&buftype")) != 1 | return 0 | endif
  934.   return 1
  935. endfunction
  936.  
  937. function! s:GetNormalWindow()
  938.   let l:i = 1
  939.   while(l:i <= winnr('$'))
  940.     if s:CheckNormalWindow(l:i)
  941.       return l:i
  942.     endif
  943.     let l:i = l:i + 1
  944.   endwhile
  945.   return -1
  946. endfun
  947.  
  948. let t:saved_window = '-1'
  949. function! s:SaveWindow()
  950.   let l:current_window = bufwinnr('%')
  951.   if s:CheckNormalWindow(l:current_window)
  952.     let t:saved_window = l:current_window
  953.   endif
  954. endfunction
  955.  
  956.  
  957. function! s:EnableAutoSaveWindow()
  958.   augroup PreviousNormalWindow
  959.     autocmd!
  960.     autocmd WinEnter * call s:SaveWindow()
  961.   augroup END
  962. endfunction
  963. call s:EnableAutoSaveWindow()
  964.  
  965. function! s:DisableAutoSaveWindow()
  966.   augroup PreviousNormalWindow
  967.     autocmd!
  968.   augroup END
  969. endfunction
  970.  
  971.  
  972. function! LoadWindow()
  973.   if t:saved_window != -1
  974.     if s:CheckNormalWindow(t:saved_window)
  975.       execute t:saved_window . "wincmd w"
  976.       return
  977.     endif
  978.   endif
  979.  
  980.   let l:window_number = s:GetNormalWindow()
  981.   if l:window_number != -1
  982.     exec l:window_number . 'wincmd w'
  983.   else
  984.     wincmd w
  985.   endif
  986. endfunction
  987.  
  988. " ----------------------------------------------------------------------------
  989. " Windows swithing
  990. function! SwitchWindowTo(bufexpr)
  991.   let l:window_number = bufwinnr(a:bufexpr)
  992.   if l:window_number == -1 | return | endif
  993.  
  994.   let l:current_window = bufwinnr('%')
  995.   if l:current_window == l:window_number
  996.     call LoadWindow()
  997.     return
  998.   endif
  999.  
  1000.   execute l:window_number . "wincmd w"
  1001. endfunction
  1002.  
  1003. " ----------------------------------------------------------------------------
  1004. " Terminal toggle
  1005.  
  1006. function! TerminalToggle()
  1007.   let l:terminal_buffer = bufnr('Terminal')
  1008.   if terminal_buffer == -1
  1009.     execute "bot 15new"
  1010.     terminal
  1011.     setlocal bufhidden=hide
  1012.     setlocal nobuflisted
  1013.     setlocal winfixwidth
  1014.     setlocal winfixheight
  1015.     setlocal filetype=terminal
  1016.     setlocal scrolloff=0
  1017.     file Terminal
  1018.     startinsert
  1019.     return
  1020.   endif
  1021.  
  1022.   let l:terminal_window = bufwinnr(terminal_buffer)
  1023.   if terminal_window == -1
  1024.     execute "bot 15new +buffer".terminal_buffer
  1025.     setlocal winfixwidth
  1026.     setlocal winfixheight
  1027.   else
  1028.     if bufwinnr('%') == l:terminal_window
  1029.       call LoadWindow()
  1030.     endif
  1031.     execute "close ".terminal_window
  1032.   endif
  1033. endfunction
  1034.  
  1035. " ----------------------------------------------------------------------------
  1036. " nerdtree toggle
  1037.  
  1038. " NERDTreeToggle renumber windows
  1039. function! NerdtreeToggle()
  1040.   let l:buffer_number = winbufnr(t:saved_window)
  1041.   NERDTreeToggle
  1042.   let t:saved_window = bufwinnr(l:buffer_number)
  1043.   call LoadWindow()
  1044. endfunction
  1045. " }}}
  1046. " ============================================================================
  1047.  
  1048. call s:LoadPlugins()
  1049. call s:BasicSettings()
  1050. call s:ConfigurePlugins()
  1051. call s:ConfigureView()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement