Last active
February 2, 2022 18:01
-
-
Save shirvan/291b523def651b1e5106af320df6b4f8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Fish doesn't play all that well with others | |
set shell=/bin/bash | |
let mapleader = "\<Space>" | |
" ============================================================================= | |
" # PLUGINS | |
" ============================================================================= | |
" Load vundle | |
set nocompatible | |
filetype off | |
call plug#begin() | |
" Load plugins | |
" VIM enhancements | |
Plug 'justinmk/vim-sneak' | |
Plug 'tpope/vim-surround' | |
Plug 'tpope/vim-repeat' | |
Plug 'tpope/vim-fugitive' | |
Plug 'mhinz/vim-startify' | |
Plug 'airblade/vim-gitgutter' | |
Plug 'nathanaelkane/vim-indent-guides' | |
Plug 'tpope/vim-commentary' | |
Plug 'neomake/neomake' | |
" Colorscheme | |
Plug 'sjl/badwolf' | |
" GUI enhancements | |
Plug 'itchyny/lightline.vim' | |
Plug 'machakann/vim-highlightedyank' | |
Plug 'andymass/vim-matchup' | |
" Fuzzy finder | |
Plug 'airblade/vim-rooter' | |
Plug '/usr/local/opt/fzf' | |
Plug 'junegunn/fzf.vim' | |
" Semantic language support | |
Plug 'neoclide/coc.nvim', {'branch': 'release'} | |
" Syntactic language support | |
Plug 'cespare/vim-toml' | |
Plug 'stephpy/vim-yaml' | |
Plug 'elixir-editors/vim-elixir' | |
Plug 'hashivim/vim-terraform' | |
"Plug 'fatih/vim-go' | |
Plug 'dag/vim-fish' | |
Plug 'godlygeek/tabular' | |
Plug 'plasticboy/vim-markdown' | |
call plug#end() | |
if has('nvim') | |
set guicursor=n-v-c:block-Cursor/lCursor-blinkon0,i-ci:ver25-Cursor/lCursor,r-cr:hor20-Cursor/lCursor | |
set inccommand=nosplit | |
noremap <C-q> :confirm qall<CR> | |
end | |
" deal with colors | |
if !has('gui_running') | |
set t_Co=256 | |
endif | |
if (match($TERM, "-256color") != -1) && (match($TERM, "screen-256color") == -1) | |
" screen does not (yet) support truecolor | |
set termguicolors | |
endif | |
" Colors | |
colorscheme badwolf | |
hi Normal ctermbg=NONE | |
" Get syntax | |
syntax on | |
" Set Python3 path | |
" let g:python3_host_prog = '/usr/local/bin/python3' | |
" Set Python2 path | |
" let g:python_host_prog = '/usr/bin/python' | |
" Lightline | |
let g:lightline = { 'colorscheme': 'wombat' } | |
let g:lightline = { | |
\ 'component_function': { | |
\ 'filename': 'LightlineFilename', | |
\ 'cocstatus': 'coc#status' | |
\ }, | |
\ } | |
function! LightlineFilename() | |
return expand('%:t') !=# '' ? @% : '[No Name]' | |
endfunction | |
" Use auocmd to force lightline update. | |
autocmd User CocStatusChange,CocDiagnosticChange call lightline#update() | |
" from http://sheerun.net/2014/03/21/how-to-boost-your-vim-productivity/ | |
if executable('ag') | |
set grepprg=ag\ --nogroup\ --nocolor | |
endif | |
if executable('rg') | |
set grepprg=rg\ --no-heading\ --vimgrep | |
set grepformat=%f:%l:%c:%m | |
endif | |
" Javascript | |
let javaScript_fold=0 | |
" Latex | |
let g:latex_indent_enabled = 1 | |
let g:latex_fold_envs = 0 | |
let g:latex_fold_sections = [] | |
" Open hotkeys | |
map <C-p> :Files<CR> | |
nmap <leader>; :Buffers<CR> | |
" Quick-save | |
nmap <leader>w :w<CR> | |
" Don't confirm .lvimrc | |
let g:localvimrc_ask = 0 | |
" racer + rust | |
" https://github.com/rust-lang/rust.vim/issues/192 | |
let g:rustfmt_autosave = 1 | |
let g:rustfmt_emit_files = 1 | |
let g:rustfmt_fail_silently = 0 | |
let g:rust_clip_command = 'xclip -selection clipboard' | |
"let g:racer_cmd = "/usr/bin/racer" | |
"let g:racer_experimental_completer = 1 | |
let $RUST_SRC_PATH = systemlist("rustc --print sysroot")[0] . "/lib/rustlib/src/rust/src" | |
" Completion | |
" Better display for messages | |
set cmdheight=2 | |
" You will have bad experience for diagnostic messages when it's default 4000. | |
set updatetime=300 | |
" Use tab for trigger completion with characters ahead and navigate. | |
" Use command ':verbose imap <tab>' to make sure tab is not mapped by other plugin. | |
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-.> to trigger completion. | |
inoremap <silent><expr> <c-.> coc#refresh() | |
" Use <cr> to confirm completion, `<C-g>u` means break undo chain at current position. | |
" Coc only does snippet and additional edit on confirm. | |
" inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>" | |
" Or use `complete_info` if your vim support it, like: | |
if exists('*complete_info') | |
inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>" | |
else | |
imap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>" | |
endif | |
" ============================================================================= | |
" # Rust CoC | |
" ============================================================================= | |
" Highlight the symbol and its references when holding the cursor. | |
autocmd CursorHold * silent call CocActionAsync('highlight') | |
" Symbol renaming. | |
nmap <leader>rn <Plug>(coc-rename) | |
" Introduce function text object | |
" NOTE: Requires 'textDocument.documentSymbol' support from the language server. | |
xmap if <Plug>(coc-funcobj-i) | |
xmap af <Plug>(coc-funcobj-a) | |
omap if <Plug>(coc-funcobj-i) | |
omap af <Plug>(coc-funcobj-a) | |
" Use <TAB> for selections ranges. | |
nmap <silent> <TAB> <Plug>(coc-range-select) | |
xmap <silent> <TAB> <Plug>(coc-range-select) | |
" Find symbol of current document. | |
nnoremap <silent> <space>o :<C-u>CocList outline<cr> | |
" Search workspace symbols. | |
nnoremap <silent> <space>s :<C-u>CocList -I symbols<cr> | |
" Implement methods for trait | |
nnoremap <silent> <space>i :call CocActionAsync('codeAction', '', 'Implement missing members')<cr> | |
" Show actions available at this location | |
nnoremap <silent> <space>a :CocAction<cr> | |
" ============================================================================= | |
" # Editor settings | |
" ============================================================================= | |
filetype plugin indent on | |
set autoindent | |
set timeoutlen=300 " http://stackoverflow.com/questions/2158516/delay-before-o-opens-a-new-line | |
set encoding=utf-8 | |
set scrolloff=2 | |
set noshowmode | |
set hidden | |
set nowrap | |
set nojoinspaces | |
let g:sneak#s_next = 1 | |
let g:vim_markdown_new_list_item_indent = 0 | |
let g:vim_markdown_auto_insert_bullets = 0 | |
let g:vim_markdown_frontmatter = 1 | |
set printfont=:h10 | |
set printencoding=utf-8 | |
set printoptions=paper:letter | |
" Always draw sign column. Prevent buffer moving when adding/deleting sign. | |
set signcolumn=yes | |
" Settings needed for .lvimrc | |
set exrc | |
set secure | |
" Sane splits | |
set splitright | |
set splitbelow | |
" Decent wildmenu | |
set wildmenu | |
set wildmode=list:longest | |
set wildignore=.hg,.svn,*~,*.png,*.jpg,*.gif,*.settings,Thumbs.db,*.min.js,*.swp,publish/*,intermediate/*,*.o,*.hi,Zend,vendor | |
" Wrapping options | |
set formatoptions=tc " wrap text and comments using textwidth | |
set formatoptions+=r " continue comments when pressing ENTER in I mode | |
set formatoptions+=q " enable formatting of comments with gq | |
set formatoptions+=n " detect lists for formatting | |
set formatoptions+=b " auto-wrap in insert mode, and do not wrap old long lines | |
" Proper search | |
set incsearch | |
set ignorecase | |
set smartcase | |
set gdefault | |
" Search results centered please | |
nnoremap <silent> n nzz | |
nnoremap <silent> N Nzz | |
nnoremap <silent> * *zz | |
nnoremap <silent> # #zz | |
nnoremap <silent> g* g*zz | |
" Very magic by default | |
nnoremap ? ?\v | |
nnoremap / /\v | |
cnoremap %s/ %sm/ | |
" ============================================================================= | |
" # GUI settings | |
" ============================================================================= | |
set guioptions-=T " Remove toolbar | |
set vb t_vb= " No more beeps | |
set backspace=2 " Backspace over newlines | |
set nofoldenable | |
set ruler " Where am I? | |
set ttyfast | |
" https://github.com/vim/vim/issues/1735#issuecomment-383353563 | |
set lazyredraw | |
set synmaxcol=500 | |
set laststatus=2 | |
set relativenumber " Relative line numbers | |
set number " Also show current absolute line | |
set diffopt+=iwhite " No whitespace in vimdiff | |
" Make diffing better: https://vimways.org/2018/the-power-of-diff/ | |
set colorcolumn=80,120 " and give me a colored column | |
set showcmd " Show (partial) command in status line. | |
set mouse=a " Enable mouse usage (all modes) in terminals | |
set shortmess+=c " don't give |ins-completion-menu| messages. | |
" Show those damn hidden characters | |
" Verbose: set listchars=nbsp:¬,eol:¶,extends:»,precedes:«,trail:• | |
set listchars=nbsp:¬,extends:»,precedes:«,trail:• | |
" ============================================================================= | |
" # Keyboard shortcuts | |
" ============================================================================= | |
" ; as : | |
nnoremap ; : | |
" Ctrl+c as Esc | |
" https://github.com/neovim/neovim/issues/5916 | |
nnoremap <C-c> <Esc> | |
inoremap <C-c> <Esc> | |
vnoremap <C-c> <Esc> | |
snoremap <C-c> <Esc> | |
xnoremap <C-c> <Esc> | |
cnoremap <C-c> <Esc> | |
onoremap <C-c> <Esc> | |
lnoremap <C-c> <Esc> | |
tnoremap <C-c> <Esc> | |
" Ctrl+h to stop searching | |
vnoremap <C-h> :nohlsearch<cr> | |
nnoremap <C-h> :nohlsearch<cr> | |
" Jump to start and end of line using the home row keys | |
map H ^ | |
map L $ | |
" Neat X clipboard integration | |
" ,p will paste clipboard into buffer | |
" ,c will copy entire buffer into clipboard | |
noremap <leader>p :read !xsel --clipboard --output<cr> | |
noremap <leader>c :w !xsel -ib<cr><cr> | |
" <leader>s for Rg search | |
noremap <leader>s :Rg | |
let g:fzf_layout = { 'down': '~20%' } | |
command! -bang -nargs=* Rg | |
\ call fzf#vim#grep( | |
\ 'rg --column --line-number --no-heading --color=always '.shellescape(<q-args>), 1, | |
\ <bang>0 ? fzf#vim#with_preview('up:60%') | |
\ : fzf#vim#with_preview('right:50%:hidden', '?'), | |
\ <bang>0) | |
function! s:list_cmd() | |
let base = fnamemodify(expand('%'), ':h:.:S') | |
return base == '.' ? 'fd --type file --follow' : printf('fd --type file --follow | proximity-sort %s', shellescape(expand('%'))) | |
endfunction | |
"command! -bang -nargs=? -complete=dir Files | |
" \ call fzf#vim#files(<q-args>, {'source': s:list_cmd(), | |
" \ 'options': '--tiebreak=index'}, <bang>0) | |
command! -bang -nargs=? -complete=dir Files | |
\ call fzf#vim#files(<q-args>, fzf#vim#with_preview(), <bang>0) | |
" Open new file adjacent to current file | |
nnoremap <leader>e :e <C-R>=expand("%:p:h") . "/" <CR> | |
" Left and right can switch buffers | |
nnoremap <leader><left> :bp<CR> | |
nnoremap <leader><right> :bn<CR> | |
" Move by line | |
nnoremap j gj | |
nnoremap k gk | |
" 'Smart' navigation | |
nmap <silent> E <Plug>(coc-diagnostic-prev) | |
nmap <silent> W <Plug>(coc-diagnostic-next) | |
nmap <silent> <leader>l <Plug>(coc-diagnostic-info) | |
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 | |
" nmap <silent> F <Plug>(ale_lint) | |
" nmap <silent> <C-l> <Plug>(ale_detail) | |
" nmap <silent> <C-g> :close<cr> | |
" <leader><leader> toggles between buffers | |
nnoremap <leader><leader> <c-^> | |
" <leader>, shows/hides hidden characters | |
nnoremap <leader>, :set invlist<cr> | |
" <leader>q shows stats | |
nnoremap <leader>q g<c-g> | |
" Keymap for replacing up to next _ or - | |
noremap <leader>m ct_ | |
noremap <leader>n ct- | |
" I can type :help on my own, thanks. | |
map <F1> <Esc> | |
imap <F1> <Esc> | |
" Tab sizes | |
set tabstop=2 | |
set shiftwidth=2 | |
set expandtab | |
" ============================================================================= | |
" # Autocommands | |
" ============================================================================= | |
" Prevent accidental writes to buffers that shouldn't be edited | |
autocmd BufRead *.orig set readonly | |
autocmd BufRead *.pacnew set readonly | |
" Leave paste mode when leaving insert mode | |
autocmd InsertLeave * set nopaste | |
" Jump to last edit position on opening file | |
if has("autocmd") | |
" https://stackoverflow.com/questions/31449496/vim-ignore-specifc-file-in-autocommand | |
au BufReadPost * if expand('%:p') !~# '\m/\.git/' && line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif | |
endif | |
" Neomake on write | |
call neomake#configure#automake('nrwi', 500) | |
" Help filetype detection | |
autocmd BufRead *.plot set filetype=gnuplot | |
autocmd BufRead *.md set filetype=markdown | |
autocmd BufRead *.lds set filetype=ld | |
autocmd BufRead *.tex set filetype=tex | |
autocmd BufRead *.trm set filetype=c | |
autocmd BufRead *.xlsx.axlsx set filetype=ruby | |
" Script plugins | |
autocmd Filetype html,xml,xsl,php source ~/.config/nvim/scripts/closetag.vim | |
" ============================================================================= | |
" # Footer | |
" ============================================================================= | |
" nvim | |
if has('nvim') | |
runtime! plugin/python_setup.vim | |
endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment