dotfiles/neovim/init.vim

317 lines
10 KiB
VimL

"
" Plugins Install
"
" PlugInstall [name ...] [#threads] Install plugins
" PlugUpdate [name ...] [#threads] Install or update plugins
" PlugClean[!] Remove unused directories (bang version will clean without prompt)
" PlugUpgrade Upgrade vim-plug itself
" PlugStatus Check the status of plugins
" PlugDiff Examine changes from the previous update and the pending changes
" PlugSnapshot[!] [output path] Generate script for restoring the current snapshot of the plugins<Paste>
if filereadable($HOME . '/.pyenv/versions/nvim/bin/python')
let g:nvim_python_path = $HOME . '/.pyenv/versions/nvim/bin'
let g:python3_host_prog = g:nvim_python_path . '/python'
let $PATH = g:nvim_python_path . ':' . $PATH
endif
let g:node_host_prog = $HOME . '/.local/bin/npm'
if !has('python3')
echohl WarningMsg
echo 'Missing python3 support - need to pip install pynvim'
echohl None
endif
let g:plug_root = $HOME . '/.config/nvim/.plug'
call plug#begin(g:plug_root)
" completion / linter
Plug 'williamboman/mason.nvim'
Plug 'williamboman/mason-lspconfig.nvim'
Plug 'neovim/nvim-lspconfig'
Plug 'onsails/lspkind-nvim'
Plug 'ojroques/nvim-lspfuzzy'
Plug 'ray-x/lsp_signature.nvim'
Plug 'hrsh7th/nvim-cmp'
Plug 'hrsh7th/cmp-buffer'
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-path'
Plug 'hrsh7th/cmp-nvim-lua'
Plug 'ray-x/cmp-treesitter'
Plug 'saadparwaiz1/cmp_luasnip'
Plug 'L3MON4D3/LuaSnip', {'do': 'make install_jsregexp'}
Plug 'rafamadriz/friendly-snippets'
Plug 'folke/trouble.nvim'
" Utils
if executable('gcc')
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
endif
Plug 'mhinz/vim-startify'
Plug 'nvim-tree/nvim-web-devicons'
" weird color bar appear on next commit
" Plug 'nvim-tree/nvim-tree.lua', {'commit': 'f24afa2cef551122b8bd53bb2e4a7df42343ce2e'}
Plug 'nvim-tree/nvim-tree.lua'
Plug 'junegunn/fzf'
Plug 'junegunn/fzf.vim'
Plug 'chengzeyi/fzf-preview.vim'
Plug 'itchyny/lightline.vim'
Plug 'josa42/nvim-lightline-lsp'
Plug 'Yggdroot/indentLine'
Plug 'Raimondi/delimitMate'
Plug 'tpope/vim-sensible'
Plug 'tpope/vim-commentary'
Plug 'tpope/vim-surround'
Plug 'tpope/vim-eunuch'
Plug 'psliwka/vim-smoothie'
Plug 'troydm/zoomwintab.vim'
" breaking change - does not detect root pattern with priority
Plug 'airblade/vim-rooter', {'commit': 'd64f3e04df9914e784508019a1a1f291cbb40bd4'}
Plug 'akinsho/toggleterm.nvim'
" Language Specific
" python syntax hilight
" Plug 'wookayin/semshi', {'do': ':UpdateRemotePlugins'}
" nvim-go + deps
Plug 'ray-x/go.nvim', {'for': 'go'}
Plug 'ray-x/guihua.lua', {'for': 'go'}
" puppet
Plug 'rodjek/vim-puppet', {'for': 'puppet'}
" annotations (require nvim-treesitter)
Plug 'danymat/neogen'
" ctags / cscope
if executable('ctags')
Plug 'dhananjaylatkar/cscope_maps.nvim'
Plug 'ludovicchabant/vim-gutentags', {
\ 'do': 'cd ' . g:plug_root . '/vim-gutentags; patch -p1 -stNr /dev/null < ~/.config/nvim/plugin_patch/vim-gutentags.patch; git commit -am local; true'
\}
endif
Plug 'stevearc/aerial.nvim'
" git
Plug 'mhinz/vim-signify'
Plug 'rhysd/git-messenger.vim'
Plug 'jcosmao/blame.nvim'
Plug 'sindrets/diffview.nvim'
" Colorscheme
Plug 'sainnhe/gruvbox-material'
Plug 'norcalli/nvim-colorizer.lua'
call plug#end()
"
" Common
"
set nocompatible
filetype off
filetype plugin indent on
syntax off
set mouse=
set ttyfast " Indicate fast terminal conn for faster redraw
set lazyredraw " Wait to redraw
set magic
set ruler " affiche la position du curseur en bas droite
set showmode " affiche le mode (insert ou autre)
set showcmd " Show current command.
set laststatus=2
set number
set cursorline
set cmdheight=2
set signcolumn=auto
set encoding=utf-8
set fileencoding=utf-8
set termencoding=utf-8
set backspace=indent,eol,start " activation de la touche backspace
set ai " autoindentation active
set sm " syntax match: soulignement d'une parenth e associ ,...
set hlsearch " colorisation de la recherche
set ignorecase
set ts=4 " taille des tabulations
set sw=4 " taille des indentations
set tw=0 " textwidth: largeur du texte (commentaires) 0=pas de limite
set expandtab " converti les tab en espaces
set directory=/tmp
set wildmode=full " vim bar autocomplete
set wildmenu
set smartindent
set autoread " Set vim to update autmatically when a file's read-only state is changed
set undodir=~/.cache/vim/undodir
set undofile " Persistent undo
set undolevels=10000 " maximum number of changes that can be undone
set undoreload=100000 " maximum number lines to save for undo on a buffer reload
set history=1000 " remember more commands and search history
set nobackup " no backup or swap file, live dangerously
set noswapfile " swap files give annoying warning
set clipboard^=unnamedplus " send yank to system clipboard
set updatetime=100
set hidden " Allow modified hidden buffers
set autowriteall
set noautochdir
set keymodel=startsel " shift+arrow selection
set diffopt+=vertical " start :diffsplit in vertical mode
set conceallevel=0 " Do not interpret markdown for ex
" Autocompletion
set shortmess+=c
set pumheight=20
set termguicolors
if !empty("$THEME")
exec 'set background='.$THEME
else
set background=light
endif
let mapleader = " " " Leader key set to <space bar>
" Load lua plugins config
if ! &readonly && has('python3')
lua require('config')
endif
"
" Commands mapping
"
" Remap some common typos
command! -bang E e<bang>
command! -bang Q q<bang>
command! -bang W w<bang>
command! -bang QA qa<bang>
command! -bang Qa qa<bang>
command! -bang Wa wa<bang>
command! -bang WA wa<bang>
command! -bang Wq wq<bang>
command! -bang WQ wq<bang>
" Mapping
map <silent> <leader>? :exec printf('view %s/help.md', fnamemodify(expand($MYVIMRC), ':p:h'))<cr>
map <silent> <leader>V :tabedit $MYVIMRC <cr>
map <silent> <leader>VV :source $MYVIMRC \| :echo $MYVIMRC 'reloaded' <cr>
map <silent> <leader><ESC> :call custom#lineInfosToggle() <cr>
map <silent> <F1> :NvimTreeFindFileToggle! <cr>
map <silent> <F2> :AerialToggle <cr>
map <silent> <F3> :IndentLinesToggle <cr>
map <silent> <F4> :set number! <cr>
map <silent> <F5> :SignifyToggle <cr>
map <silent> <F6> :set paste! <cr>
map <silent> <F9> :BackgroundToggle <cr>
map <silent> <F10> :Startify <cr>
map <silent> <F12> :call custom#ToggleMouse() <cr>
map <silent><expr> <leader>q empty(filter(getwininfo(), 'v:val.quickfix')) ? ":copen<cr>" : ":cclose<cr>"
map <silent> <leader>a :execute 'RgWithFilePath' expand('<cword>') <cr>
map <silent> <leader>A :execute 'Rg' expand('<cword>') <cr>
map <silent> <leader>s :RgWithFilePath <cr>
map <silent> <leader>S :Rg <cr>
map <silent> <leader>f :Files <cr>
map <silent> <leader>d :Neogen <cr>
map <silent> <leader>b :Buffers <cr>
map <silent> <leader>t :FZFCtags <cr>
map <silent> <leader>c :BCommits <cr>
map <silent> <leader>h :History <cr>
map <silent> <leader>g :execute 'ToggleBlame virtual' <cr>
map <silent> <leader>G :GitMessenger <cr>
map <silent> <leader>m :Snippets <cr>
map <silent> <C-a> ^
imap <silent> <C-a> <C-o>^
map <silent> <C-e> $
imap <silent> <C-e> <C-o>$
map <silent> <C-Right> e
map <silent> <C-Left> b
map <silent> <leader>+ :vsplit<cr>
map <silent> <leader>= :split <cr>
map <silent> <C-S-Up> :wincmd k<cr>
map <silent> <C-S-Down> :wincmd j<cr>
map <silent> <C-S-Right> :wincmd l<cr>
map <silent> <C-S-Left> :wincmd h<cr>
map <silent> <leader><Up> :wincmd k<cr>
map <silent> <leader><Down> :wincmd j<cr>
map <silent> <leader><Right> :wincmd l<cr>
map <silent> <leader><Left> :wincmd h<cr>
map <silent> <leader><leader> :noh <cr>
map <silent> <leader><ENTER> <C-w>o
map <silent> <leader>k :TroubleToggle document_diagnostics<cr>
map <silent> <leader>l :TroubleToggle workspace_diagnostics <cr>
" paste last yank (not from dd)
map <silent> <leader>p "0p
" vim surround
map <silent> <leader>" ysiW"
map <silent> <leader>: ysiw"
map <silent> <leader>' ysiW'
map <silent> <leader>; ysiw'
nnoremap <silent> <M-Up> <cmd>call smoothie#do("\<C-U>") <CR>
vnoremap <silent> <M-Up> <cmd>call smoothie#do("\<C-U>") <CR>
nnoremap <silent> <M-Down> <cmd>call smoothie#do("\<C-D>") <CR>
vnoremap <silent> <M-Down> <cmd>call smoothie#do("\<C-D>") <CR>
" Always forward with n / backward with N
noremap <expr> n (v:searchforward ? 'n' : 'N')
noremap <expr> N (v:searchforward ? 'N' : 'n')
" Tab
lua << EOF
local opts = { noremap = true, silent = true }
vim.keymap.set({'n', 'i'}, '<C-PageDown>', '<C-o>:tabprevious<CR>', opts)
vim.keymap.set({'n', 'i'}, '<S-PageDown>', '<C-o>:tabprevious<CR>', opts)
vim.keymap.set({'n', 'i'}, '<C-PageUp>', '<C-o>:tabnext<CR>', opts)
vim.keymap.set({'n', 'i'}, '<S-PageUp>', '<C-o>:tabnext<CR>', opts)
vim.keymap.set({'n', 'i'}, '<C-t>', '<C-o>:tabnew<CR>', opts)
EOF
for i in range(1, 9)
execute "map <leader>" . i . " " . i . "gt"
endfor
map <leader>0 :tablast <cr>
nmap <leader>> <plug>(signify-next-hunk)
nmap <leader>< <plug>(signify-prev-hunk)
map <silent> <C-g> :ToggleTerm dir=%:p:h <cr>
" Specific filetype
autocmd BufNewFile,BufRead *.lib set filetype=sh
autocmd BufNewFile,BufRead *.source set filetype=sh
autocmd BufNewFile,BufRead *.pp set filetype=puppet
autocmd BufNewFile,BufRead *.inc set filetype=perl
autocmd BufNewFile,BufRead *.tf set filetype=terraform
autocmd BufNewFile,BufRead *.conf set filetype=ini
autocmd WinEnter,BufWinEnter,FileWritePost,BufWritePost,BufRead * call custom#displayFilePath()
" remove auto<fucking>indent on colon :
autocmd FileType python,yaml setlocal indentkeys-=<:>
autocmd FileType python,yaml setlocal indentkeys-=:
autocmd FileType html,javascript,terraform set shiftwidth=2
augroup gomapping
autocmd!
autocmd FileType go nnoremap <silent> <leader><BS> :GoCodeLenAct<cr>
autocmd FileType go nnoremap <silent> <leader>= :GoIfErr<cr>
augroup end
augroup indentlinesdisable
autocmd!
autocmd TermOpen * execute 'IndentLinesDisable'
autocmd FileType markdown,json,yaml,join(g:custom_special_filtetypes, ",") execute 'IndentLinesDisable'
augroup end
" trim whitespace
autocmd BufWritePre * :%s/\s\+$//e
" save without trim
imap <silent> <C-s> <Esc>:noautocmd w <cr>
map <silent> <C-s> :noautocmd w <cr>