278 lines
7.2 KiB
Plaintext
278 lines
7.2 KiB
Plaintext
" 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 <CR> G
|
||
nnoremap <BS> gg
|
||
vnoremap <CR> G
|
||
vnoremap <BS> 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 <silent> n j
|
||
noremap <silent> e k
|
||
noremap <silent> i l
|
||
|
||
" Merge lines
|
||
noremap <silent> 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 <C-N> <C-E>
|
||
noremap <C-E> <C-P>
|
||
|
||
" Disable default space action
|
||
noremap <Space> <NOP>
|
||
|
||
" Autoindent code
|
||
nmap <F7> jzgg=G`z
|
||
|
||
" Buffer actions
|
||
nnoremap <silent> <Tab> :bn<CR>
|
||
nnoremap <silent> <S-Tab> :bp<CR>
|
||
nnoremap <silent> <leader>bd :bp \| bd #<cr>
|
||
|
||
" Unhighlight search results with \
|
||
noremap <silent> \ :let @/ = ""<CR>
|
||
|
||
" Quickfix window mapping
|
||
nnoremap <Leader>cq :cclose<CR>
|
||
nnoremap <Leader>cn :cnext<CR>
|
||
nnoremap <Leader>cp :cprev<CR>
|
||
nnoremap <Leader>cf :cfirst<CR>
|
||
nnoremap <Leader>cl :clast<CR>
|
||
|
||
" Window keymapping
|
||
if !exists('g:vim_better_default_window_key_mapping') || g:vim_better_default_window_key_mapping
|
||
nnoremap <Leader>wn <C-W>j
|
||
nnoremap <Leader>we <C-W>k
|
||
nnoremap <Leader>wh <C-W>h
|
||
nnoremap <Leader>wi <C-W>l
|
||
nnoremap <Leader>wH <C-W>5<
|
||
nnoremap <Leader>wI <C-W>5>
|
||
nnoremap <Leader>wN :resize +5<CR>
|
||
nnoremap <Leader>wE :resize -5<CR>
|
||
endif
|
||
|
||
" FZF mappings
|
||
noremap <C-P> :GFiles<CR>
|
||
noremap <leader>ff :Files<CR>
|
||
noremap <C-G> :Lines<CR>
|
||
noremap <C-Q> :Buffers<CR>
|
||
noremap <C-T> :Tags<CR>
|
||
noremap <leader>? :Maps<CR>
|
||
|
||
" Nerdcommenter maps
|
||
nmap <Leader>/ <Plug>NERDCommenterToggle
|
||
vmap <Leader>/ <Plug>NERDCommenterToggle
|
||
|
||
" Fugitive maps
|
||
nnoremap <silent> <Leader>gd :Gvdiff<CR>
|
||
|
||
" Undotree maps
|
||
nnoremap <F3> :UndotreeToggle<cr>
|
||
|
||
""""""""""""""""""""""
|
||
" 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! <SID>StripTrailingWhitespaces()
|
||
let l = line('.')
|
||
let c = col('.')
|
||
%s/\s\+$//e
|
||
call cursor(l, c)
|
||
endfun
|
||
autocmd FileType * autocmd BufWritePre <buffer> :call <SID>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
|