" vim: set ft=vim: syntax=vim " Use exclude option if you don't want the full Layer, " e.g., Layer 'better-defaults', { 'exclude': 'itchyny/vim-cursorword' } function! Layers() let g:spacevim_lsp_engine = 'coc' let g:spacevim_speed_up_via_timer = 0 let g:spacevim_enable_startify = 0 " Polyglot configuration let g:polyglot_disabled = ['systemd'] Layer 'airline' Layer 'better-defaults', {'exclude': [ \ 'kshenoy/vim-signature', \ 'google/vim-searchindex', \ ] } Layer 'docker' Layer 'editing' Layer 'fzf' Layer 'git' Layer 'lsp' Layer 'markdown' Layer 'programming', {'exclude': ['luochen1990/rainbow']} Layer 'unite' Layer 'syntax-checking' endfunction function! UserInit() Plug 'andymass/vim-matchup' Plug 'tpope/vim-repeat' Plug 'pappasam/coc-jedi', { 'do': 'yarn install --frozen-lockfile && yarn build' } Plug 'chr4/nginx.vim' Plug 'Firef0x/PKGBUILD.vim' Plug 'elzr/vim-json', { 'for': 'json' } Plug 'TheEdgeOfRage/vim-pythonsense', { 'for': 'python' } Plug 'hashivim/vim-terraform' Plug 'morhetz/gruvbox' Plug 'mbbill/undotree' Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && yarn install', 'for': ['markdown', 'vim-plug'] } Plug 'mboughaba/i3config.vim' endfunction " Override the existing configurations and add extras here. function! UserConfig() set termguicolors color gruvbox set encoding=utf8 set shell=/bin/bash set autochdir set laststatus=2 "set timeoutlen=300 "set backspace=2 set showcmd set wrap set linebreak set number set relativenumber set cursorline set cursorcolumn set tabstop=4 set shiftwidth=4 set softtabstop=4 set textwidth=0 set noexpandtab set autoindent set background=dark set list set listchars=tab:│\ ,trail:~,extends:>,precedes:< set splitright set splitbelow set foldmethod=indent " Persistent undo set undofile set undodir=~/.local/share/nvim/undodir " Backspace and Enter as G and gg nnoremap G nnoremap gg vnoremap G vnoremap gg """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Colemak-Vim Mappings " " The idea is to use HNEI as arrows – keeping the traditional Vim homerow style – and changing as " little else as possible. This means JKL are free to use and NEI need new keys. " - k/K is the new n/N ["next/prev search"] " - l/L is the new i/I ["insert"]. " - m/M is the new e/E ["jump" to EOW]. " - j/J is the new m/M ["marks"] " - H/I skip to the beginning and end of lines. Much more intuitive than ^/$. " - l replaces i as the "inner" modifier [e.g. "dlw" becomes "dlw"]. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " HNEI arrows. noremap n j noremap e k noremap i l " Merge lines noremap N J " Last search. noremap k n noremap K N " mark noremap j m noremap J M " l/L insert noremap l i noremap L I " EOW. noremap m e noremap M E " End of line noremap I $ noremap H ^ noremap noremap " Disable default space action noremap " Autoindent code nmap jzgg=G`z " Buffer actions nnoremap :bn nnoremap :bp nnoremap bd :bp \| bd # " Unhighlight search results with \ noremap \ :let @/ = "" " Quickfix window mapping nnoremap cq :cclose nnoremap cn :cnext nnoremap cp :cprev nnoremap cf :cfirst nnoremap cl :clast " Window keymapping if !exists('g:vim_better_default_window_key_mapping') || g:vim_better_default_window_key_mapping nnoremap wn j nnoremap we k nnoremap wh h nnoremap wi l nnoremap wH 5< nnoremap wI 5> nnoremap wN :resize +5 nnoremap wE :resize -5 endif " FZF mappings noremap :GFiles noremap ff :Files noremap :Lines noremap :Buffers noremap :Tags noremap ? :Maps " Nerdcommenter maps nmap / NERDCommenterToggle vmap / NERDCommenterToggle " Fugitive maps nnoremap gd :Gvdiff " Undotree maps nnoremap :UndotreeToggle """""""""""""""""""""" " Plugin configuration """""""""""""""""""""" " Airline settings let g:airline_powerline_fonts = 1 let g:airline_theme='gruvbox' let g:airline#extensions#ale#enabled = 1 " Signify settings let g:signify_sign_delete_first_line = '-' " Per filetype indentation settings augroup filetypeDefinitions autocmd Filetype c,cpp setl noet ts=4 sts=4 sw=4 autocmd Filetype html setl noet ts=2 sts=2 sw=2 autocmd Filetype javascript,js setl et ts=4 sts=4 sw=4 autocmd Filetype json,jsonnet setl et ts=4 sts=4 sw=4 autocmd Filetype lua setl et ts=2 sts=2 sw=2 autocmd Filetype nginx setl noet ts=4 sts=4 sw=4 autocmd Filetype php setl et ts=4 sw=4 sts=4 tw=0 autocmd Filetype python setl et ts=4 sw=4 sts=4 tw=0 autocmd Filetype rst setl autoindent& cindent& smartindent& indentexpr& et ts=4 sts=4 sw=4 autocmd Filetype terraform setl et ts=2 sts=2 sw=2 autocmd Filetype tex setl et ts=4 sts=4 sw=4 autocmd Filetype typescript setl et ts=2 sts=2 sw=2 autocmd Filetype yaml,helm setl et ts=2 sts=2 sw=2 augroup END augroup filetypedetect autocmd BufNew,BufNewFile,BufRead *.network,*.netdev :setfiletype systemd autocmd BufNew,BufNewFile,BufRead *.rasi setf css augroup END " Don't insert title into new files autocmd! spacevimNewFile BufNewFile *.py,*.cpp,*.c,*.sh,*.java,*.pl " Format files command! FormatJSON %!python -m json.tool command! FormatPython %!yapf command! W :execute ':silent w !sudo tee % > /dev/null' | :edit! " autocmd! spacevimStart " Strip trailing whitespaces on save fun! StripTrailingWhitespaces() let l = line('.') let c = col('.') %s/\s\+$//e call cursor(l, c) endfun autocmd FileType * autocmd BufWritePre :call StripTrailingWhitespaces() " JSON disable quote conceal let g:vim_json_syntax_conceal = 0 " Ale settings let g:ale_linters = { \ 'c': ['gcc'], \ 'cpp': ['gcc'], \ 'javascript': ['eslint'], \ 'python': ['flake8', 'isort', 'mypy'], \ } let g:ale_fixers = { \ '*': ['remove_trailing_lines', 'trim_whitespace'], \ 'go': ['gofmt', 'goimports', 'golines'], \ 'terraform': ['terraform'], \ } let g:ale_lint_on_insert_leave = 1 let g:ale_fix_on_save = 1 " fzf config let g:fzf_colors = { \ 'fg': ['fg', 'GruvboxGray'], \ 'bg': ['bg', 'Normal'], \ 'hl': ['fg', 'GruvboxRed'], \ 'fg+': ['fg', 'GruvboxGreen'], \ 'bg+': ['bg', 'GruvboxBg1'], \ 'hl+': ['fg', 'GruvboxRed'], \ 'info': ['fg', 'GruvboxOrange'], \ 'prompt': ['fg', 'GruvboxBlue'], \ 'header': ['fg', 'GruvboxBlue'], \ 'pointer': ['fg', 'Error'], \ 'marker': ['fg', 'Error'], \ 'spinner': ['fg', 'Statement'], \ } " NERDCommenter configuration let g:NERDCustomDelimiters = { \ 'requirements': {'left': '#'}, \ 'systemd': {'left': '#'}, \ 'vue': {'left': '//'}, \ } let g:NERDDefaultAlign = 'left' " Coc extensions let g:coc_global_extensions = ['coc-json', 'coc-jedi', 'coc-tsserver', 'coc-vetur', 'coc-go'] endfunction