" This is Gary Bernhardt's edited by Maximilien Cuony .vimrc file " vim:set ts=2 sts=2 sw=2 expandtab: " Boostrap autoload if empty(glob('~/.vim/autoload/plug.vim')) silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall endif call plug#begin('~/.vim/bundle') """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " BASIC EDITING CONFIGURATION """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set nocompatible " allow unsaved background buffers and remember marks/undo for them set hidden " remember more commands and search history set history=10000 set expandtab set tabstop=4 set shiftwidth=4 set softtabstop=4 set autoindent set laststatus=2 set showmatch set incsearch set hlsearch " make searches case-sensitive only if they contain upper-case characters set ignorecase smartcase " highlight current line set cursorline set cmdheight=2 set switchbuf=useopen set numberwidth=5 set showtabline=2 set winwidth=79 set shell=bash " Prevent Vim from clobbering the scrollback buffer. See " http://www.shallowsky.com/linux/noaltscreen.html set t_ti= t_te= " keep more context when scrolling off the end of a buffer set scrolloff=3 " Store temporary files in a central spot set backup set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp " allow backspacing over everything in insert mode set backspace=indent,eol,start " display incomplete commands set showcmd " Enable highlighting for syntax syntax on " Enable file type detection. " Use the default filetype settings, so that mail gets 'tw' set to 72, " 'cindent' is on in C files, etc. " Also load indent files, to automatically do language-dependent indenting. filetype plugin indent on " use emacs-style tab completion when selecting files, etc set wildmode=longest,list " make tab completion for files/buffers act like bash set wildmenu let mapleader=" " set nu set foldcolumn=2 set autoindent set foldmethod=marker """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " CUSTOM AUTOCMDS """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" augroup vimrcEx " Clear all autocmds in the group autocmd! autocmd FileType text setlocal textwidth=78 " Jump to last cursor position unless it's invalid or in an event handler autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g`\"" | \ endif "for ruby, autoindent with two spaces, always expand tabs autocmd FileType ruby,haml,eruby,yaml,html,javascript,sass,cucumber set ai sw=2 sts=2 et autocmd FileType python set sw=4 sts=4 et autocmd! BufRead,BufNewFile *.sass setfiletype sass autocmd BufRead *.mkd set ai formatoptions=tcroqn2 comments=n:> autocmd BufRead *.markdown set ai formatoptions=tcroqn2 comments=n:> " Indent p tags autocmd FileType html,eruby if g:html_indent_tags !~ '\\|p\>' | let g:html_indent_tags .= '\|p\|li\|dt\|dd' | endif " Don't syntax highlight markdown because it's often wrong autocmd! FileType mkd setlocal syn=off augroup END """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " COLOR """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set t_Co=256 " 256 colors set background=dark ":color ir_black color archman """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " MISC KEY MAPS """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" map y "*y " Move around splits with nnoremap j nnoremap k nnoremap h nnoremap l " Insert a hash rocket with imap => " Can't be bothered to understand ESC vs in insert mode imap " Clear the search buffer when hitting return nnoremap """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " MULTIPURPOSE TAB KEY " Indent if we're at the beginning of a line. Else, do completion. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! InsertTabWrapper() let col = col('.') - 1 if !col || getline('.')[col - 1] !~ '\k' return "\" else return "\" endif endfunction inoremap =InsertTabWrapper() inoremap """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " OPEN FILES IN DIRECTORY OF CURRENT FILE """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" cnoremap %% =expand('%:h').'/' map e :edit %% map v :view %% """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " RENAME CURRENT FILE """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! RenameFile() let old_name = expand('%') let new_name = input('New file name: ', expand('%'), 'file') if new_name != '' && new_name != old_name exec ':saveas ' . new_name exec ':silent !rm ' . old_name redraw! endif endfunction map n :call RenameFile() function! RandomHexString(...) let random_string = system('cat /dev/urandom | tr -dc "0-9a-f" | head -c '.shellescape(a)) return random_string endfunction function! RandomString(...) let random_string = system('cat /dev/urandom | tr -dc "0-9A-z" | head -c '.shellescape(a)) return random_string endfunction command! -range Md5 :echo system('echo '.shellescape(join(getline(, ), '\n')) . '| md5sum') command! -nargs=1 RandomHexString :normal a=RandomHexString() command! -nargs=1 RandomString :normal a=RandomString() command! InsertTime :normal a=strftime('%F %H:%M:%S.0 %z') ""colorscheme desert "" Status line full path for filename function LightlineFilename() let root = fnamemodify(get(b:, 'git_dir'), ':h') let path = expand('%:p') if path[:len(root)+1] ==# root return path[len(root)+1:] endif return expand('%') endfunction "set statusline+=%{gutentags#statusline()} " Bootstrap autoreload if empty(glob('~/.vim/autoload/plug.vim')) silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim autocmd VimEnter * PlugInstall endif call plug#begin('~/.vim/plugged') Plug 'liuchengxu/space-vim-dark' Plug 'kyoz/purify', { 'rtp': 'vim' } Plug 'https://github.com/preservim/nerdtree' Plug 'https://github.com/Xuyuanp/nerdtree-git-plugin.git' Plug 'https://github.com/tiagofumo/vim-nerdtree-syntax-highlight' Plug 'https://github.com/ryanoasis/vim-devicons' Plug 'https://github.com/millermedeiros/vim-statline.git' Plug 'https://github.com/tpope/vim-fugitive' let g:statline_fugitive = 1 let g:fugitive_gitlab_domains = ['https://git.arcanite.ch', 'https://git.polylan.ch'] "Plug 'https://github.com/junegunn/gv.vim' Plug 'https://github.com/Legrems/gv.vim' Plug 'neoclide/coc.nvim', {'branch': 'release'} Plug 'https://github.com/vim-syntastic/syntastic.git' let g:syntastic_auto_loc_list=0 let g:syntastic_enable_loc_list=0 let g:syntastic_enable_highlighting=1 let g:syntastic_error_symbol='✗→' let g:syntastic_style_error_symbol='✗→' let g:syntastic_warning_symbol='⚠→' let g:syntastic_style_warning_symbol='⚠→' let g:syntastic_aggregate_errors=1 let g:Powerline_symbols = 'unicode' let g:syntastic_python_checkers=['flake8', 'pyflakes', 'pep8', 'py3kwarn'] let g:syntastic_python_checker_args='--ignore=E501' let g:syntastic_python_flake8_post_args='--ignore=E501,E128' let g:syntastic_python_pep8_post_args='--ignore=E501,E128' let g:syntastic_check_on_open=1 Plug 'https://github.com/vim-python/python-syntax' let g:python_highlight_all=1 Plug 'https://github.com/gioele/vim-autoswap' Plug 'https://github.com/airblade/vim-gitgutter' let g:gitgutter_eager = 0 " only update on read/write let g:gitgutter_sign_column_always = 0 Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } Plug 'https://github.com/junegunn/fzf.vim' let g:fzf_commits_log_options = '--format="%C(yellow)%h%d %s %C(cyan)(%aN) %C(black)%C(bold)%cr"' let g:fzf_preview_command = 'bat --color=always --plain {-1}' let g:fzf_preview_git_status_preview_command = \ "[[ $(git diff --cached -- {-1}) != \"\" ]] && git diff --cached --color=always -- {-1} | delta || " . \ "[[ $(git diff -- {-1}) != \"\" ]] && git diff --color=always -- {-1} | delta || " . \ g:fzf_preview_command Plug 'https://github.com/shumphrey/fugitive-gitlab.vim' Plug 'https://tpope.io/vim/surround.git' Plug 'https://github.com/saltstack/salt-vim' Plug 'https://github.com/jiangmiao/auto-pairs' Plug 'https://github.com/mattn/emmet-vim' Plug 'https://github.com/itchyny/lightline.vim' let g:lightline = { \ 'active': { \ 'left': [ [ 'mode', 'paste' ], \ [ 'filename', 'readonly', 'modified' ], \ [ 'gitdiff' ] ], \ 'right': [ [ 'lineinfo' ], \ [ 'gitbranch' ] ] \ }, \ 'inactive': { \ 'left': [ [ 'filename', 'gitversion' ] ], \ }, \ 'component_function': { \ 'gitbranch': 'FugitiveHead', \ 'filename': 'LightlineFilename', \ }, \ 'component_expand': { \ 'gitdiff': 'lightline#gitdiff#get', \ }, \ 'component_type': { \ 'gitdiff': 'middle', \ }, \ } Plug 'https://github.com/preservim/nerdcommenter' " Add spaces after comment delimiters by default let g:NERDSpaceDelims = 0 " Use compact syntax for prettified multi-line comments let g:NERDCompactSexyComs = 1 " Align line-wise comment delimiters flush left instead of following code indentation let g:NERDDefaultAlign = 'left' " Allow commenting and inverting empty lines (useful when commenting a region) let g:NERDCommentEmptyLines = 1 " Enable trimming of trailing whitespace when uncommenting let g:NERDTrimTrailingWhitespace = 1 " Enable NERDCommenterToggle to check all selected lines is commented or not let g:NERDToggleCheckAllLines = 1 "Plug 'https://github.com/mcchrish/nnn.vim' "nnoremap nn :NnnPicker -de '%:p:h' let g:nnn#action = { \ '': 'tab-split', \ '': 'split', \ '': 'vsplit' } Plug 'https://github.com/terryma/vim-multiple-cursors' Plug 'https://github.com/tpope/vim-obsession' Plug 'https://github.com/Konfekt/FastFold' nmap zuz (FastFoldUpate) let g:fastfold_savehook = 1 let g:fastfold_fold_command_suffixes = ['x', 'X', 'a', 'A', 'o', 'O', 'c', 'C'] let g:fastfold_fold_movement_commands = [']z', '[z', 'zj', 'zk'] Plug 'https://github.com/majutsushi/tagbar' let g:tagbar_autofocus=1 map :TagbarToggle Plug 'https://github.com/ap/vim-css-color' Plug 'https://github.com/vifm/vifm.vim' Plug 'https://github.com/gregsexton/gitv', {'on': ['Gitv']} Plug 'stevearc/vim-arduino' Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']} Plug 'posva/vim-vue' " set to 1, nvim will open the preview window after entering the markdown buffer " default: 0 let g:mkdp_auto_start = 0 " set to 1, the nvim will auto close current preview window when change " from markdown buffer to another buffer " default: 1 let g:mkdp_auto_close = 1 " set to 1, the vim will refresh markdown when save the buffer or " leave from insert mode, default 0 is auto refresh markdown as you edit or " move the cursor " default: 0 let g:mkdp_refresh_slow = 0 " set to 1, the MarkdownPreview command can be use for all files, " by default it can be use in markdown file " default: 0 let g:mkdp_command_for_global = 0 " set to 1, preview server available to others in your network " by default, the server listens on localhost (127.0.0.1) " default: 0 let g:mkdp_open_to_the_world = 0 " use custom IP to open preview page " useful when you work in remote vim and preview on local browser " more detail see: https://github.com/iamcco/markdown-preview.nvim/pull/9 " default empty let g:mkdp_open_ip = '' " specify browser to open preview page " default: '' function OpenMarkdownPreview (url) execute "silent ! firefox --new-window " . a:url endfunction let g:mkdp_browserfunc = 'OpenMarkdownPreview' " set to 1, echo preview page url in command line when open preview page " default is 0 let g:mkdp_echo_preview_url = 0 " a custom vim function name to open preview page " this function will receive url as param " default is empty let g:mkdp_browserfunc = '' " options for markdown render " mkit: markdown-it options for render " katex: katex options for math " uml: markdown-it-plantuml options " maid: mermaid options " disable_sync_scroll: if disable sync scroll, default 0 " sync_scroll_type: 'middle', 'top' or 'relative', default value is 'middle' " middle: mean the cursor position alway show at the middle of the preview page " top: mean the vim top viewport alway show at the top of the preview page " relative: mean the cursor position alway show at the relative positon of the preview page " hide_yaml_meta: if hide yaml metadata, default is 1 " sequence_diagrams: js-sequence-diagrams options " content_editable: if enable content editable for preview page, default: v:false " disable_filename: if disable filename header for preview page, default: 0 let g:mkdp_preview_options = { \ 'mkit': {}, \ 'katex': {}, \ 'uml': {}, \ 'maid': {}, \ 'disable_sync_scroll': 0, \ 'sync_scroll_type': 'middle', \ 'hide_yaml_meta': 1, \ 'sequence_diagrams': {}, \ 'flowchart_diagrams': {}, \ 'content_editable': v:false, \ 'disable_filename': 0 \ } " use a custom markdown style must be absolute path " like '/Users/username/markdown.css' or expand('~/markdown.css') let g:mkdp_markdown_css = '' " use a custom highlight style must absolute path " like '/Users/username/highlight.css' or expand('~/highlight.css') let g:mkdp_highlight_css = '' " use a custom port to start server or random for empty let g:mkdp_port = '' " preview page title " ${name} will be replace with the file name let g:mkdp_page_title = '「${name}」' " recognized filetypes " these filetypes will have MarkdownPreview... commands let g:mkdp_filetypes = ['markdown'] Plug 'godlygeek/tabular' Plug 'plasticboy/vim-markdown' "Plug 'pwntester/octo.vim' Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} " We recommend updating the parsers on update Plug 'nvim-lua/popup.nvim' Plug 'nvim-lua/plenary.nvim' Plug 'nvim-telescope/telescope.nvim' Plug 'fannheyward/telescope-coc.nvim' Plug 'https://github.com/ludovicchabant/vim-gutentags.git' " API testing "Plug 'baverman/vial' "Plug 'baverman/vial-http' Plug 'emaniacs/vim-rest-console' let g:vrc_output_buffer_name = '__VRC_OUTPUT.json' let g:python3_host_prog = "/home/legrems/miniconda3/bin/python" let g:vial_python = 'python3' set hidden filetype plugin on call plug#end() set clipboard=unnamedplus set mouse=a set encoding=UTF-8 set autoread set modifiable " CursorLine " hi Cursor gui=reverse guibg=NONE guifg=NONE " hi CursorLine gui=reverse cterm=reverse nnoremap ct :set cursorline! " Folding set foldnestmax=10 set foldmethod=indent set nofoldenable set splitbelow set splitright set relativenumber " Custom shortcuts "-------------------------------------------------------------------------------------------| " Modes | Normal | Insert | Command | Visual | Select | Operator | Terminal | Lang-Arg | " [nore]map | @ | - | - | @ | @ | @ | - | - | " n[nore]map | @ | - | - | - | - | - | - | - | " n[orem]ap! | - | @ | @ | - | - | - | - | - | " i[nore]map | - | @ | - | - | - | - | - | - | " c[nore]map | - | - | @ | - | - | - | - | - | " v[nore]map | - | - | - | @ | @ | - | - | - | " x[nore]map | - | - | - | @ | - | - | - | - | " s[nore]map | - | - | - | - | @ | - | - | - | " o[nore]map | - | - | - | - | - | @ | - | - | " t[nore]map | - | - | - | - | - | - | @ | - | " l[nore]map | - | @ | @ | - | - | - | - | @ | "-------------------------------------------------------------------------------------------" " Search in files nnoremap :Ag "nnoremap :CocCommand fzf-preview.ProjectGrep " Git status " Old layout in the bottom "nnoremap :15Gstatus " New layout vertical nnoremap :vertical topleft Git vertical resize 50 " Search file name "nnoremap :Files " Ignore ignored files => all files "nnoremap :CocCommand fzf-preview.DirectoryFiles --no-ignore-vcs nnoremap :CocCommand fzf-preview.ProjectFiles " Search git file name "nnoremap :GFiles "nnoremap :CocCommand fzf-preview.DirectoryFiles nnoremap :CocCommand fzf-preview.GitFiles " Search buffers "nnoremap :Buffers nnoremap :CocCommand fzf-preview.Buffers " Open Flake8 error nnoremap :Errors " Force write as unix type (/n instead of /r/n) nnoremap :w! ++ff=unix " Force quit nnoremap :q! " Split diff " nnoremap :Gdiffsplit nnoremap :tab Git diff % nnoremap :tab Git diff " Using git-delta " Buffer " Bind a command to exclude some file extensions in the Ag search " command! -bang -nargs=* Ag call fzf#vim#ag(, '--ignore="*.js,*html"', fzf#vim#with_preview(), 0) "" F1-12 Shortcuts nnoremap :tabprevious nnoremap :tabnext nnoremap :GV nnoremap :tab Git show - nnoremap :Git rebase -i HEAD~ nnoremap gp :Git pull nnoremap gnb :Git checkout -b " Fold / unfold with space nnoremap za vnoremap zf nnoremap dl d$ nnoremap :bprevious nnoremap :bnext " Goto file under location nnoremap gf :vertical wincmd f nnoremap o nnoremap O "nnoremap ra CocCommand rest-client.request nnoremap ra call VrcQuery() nnoremap rr source $MYVIMRC nnoremap ww Telescope coc commands nnoremap / Telescope search_history nnoremap ch Telescope command_history "nnoremap ch CocCommand fzf-preview.CommandPalette nnoremap gk CocCommand fzf-preview.GitActions "nnoremap gc Telescope git_commits nnoremap gc lua require('telescope.custom').my_git_commits() "nnoremap gc CocCommand fzf-preview.GitLogs nnoremap gbb Telescope git_branches nnoremap gbc lua require('telescope.custom').my_git_bcommits() "nnoremap gb CocCommand fzf-preview.GitBranches "nnoremap gss Telescope git_status nnoremap gss lua require('telescope.custom').my_git_status() "nnoremap gss CocCommand fzf-preview.GitStatus nnoremap gsh Telescope git_stash "nnoremap gsc CocCommand fzf-preview.GitStashes "nnoremap iss ! glab issue list " Copy into temp file vmap y :w! /tmp/vimtmp " Read from temp file nmap p :r! cat /tmp/vimtmp " Copy filename + line number into clipboard nmap oo :call setreg('+', expand("%:h") . "/" . expand("%:t") . "#L" . line(".")) nmap xx :%!xxd nnoremap n :noh colorscheme space-vim-dark hi Normal ctermbg=NONE guibg=NONE hi LineNr ctermbg=NONE guibg=NONE hi SignColumn ctermbg=NONE guibg=NONE hi Comment guifg=#5C6370 ctermfg=59 " Load custom telescope modification lua require('telescope.custom') " Load telescope-coc extension lua require('telescope').load_extension('coc')