scriptencoding utf-8 set nocompatible if &shell =~# 'fish$' set shell=sh endif "[Use Plug-ins and Plug-in Manager(Vundle) only on UNIX or MAC OS]" if has("unix") || has("mac") filetype off "[Download and install Vundle Plug-in Manager]" if !isdirectory(expand("$HOME/.vim/bundle")) silent !mkdir -p $HOME/.vim/bundle silent cd $HOME/.vim/bundle silent !git clone https://github.com/gmarik/Vundle.vim.git silent cd $HOME endif "[Run Plug-ins]" set runtimepath+=$HOME/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'gmarik/Vundle.vim' map :VundleUpdate Plugin 'dag/vim-fish' if isdirectory(expand("$HOME/.vim/bundle/YouCompleteMe")) "[Workaround for YCM non-portability]" Plugin 'Valloric/YouCompleteMe' let g:ycm_global_ycm_extra_conf = expand("$HOME/.vim/ycm_global_conf.py") let g:ycm_extra_conf_vim_data =[ "&filetype" ] "[We're using ale for linting]" let g:ycm_show_diagnostics_ui = 0 let g:ycm_collect_identifiers_from_tags_files=1 let g:ycm_seed_identifiers_with_syntax=1 let g:ycm_show_diagnostics_ui = 0 let g:ycm_use_ultisnips_completer = 0 else Plugin 'AutoComplPop' endif Plugin 'w0rp/ale' let g:ale_linters = { \ 'cpp': ['g++'], \ 'c': ['clang'] \ } let g:ale_c_gcc_options='-std=c99 -pedantic' let g:ale_sign_error = '●' let g:ale_sign_warning = '●' Plugin 'itchyny/lightline.vim' let g:lightline = {'colorscheme': 'base16_default_dark'} if executable('ctags') Plugin 'ludovicchabant/vim-gutentags' endif Plugin 'beyondmarc/opengl.vim' Plugin 'arrufat/vala.vim' let g:vala_syntax_folding_enabled = 0 Plugin 'tikhomirov/vim-glsl' Plugin 'jamessan/vim-gnupg' Plugin 'https://git.sr.ht/~sircmpwn/hare.vim' Plugin 'romainl/vim-cool' Plugin 'machakann/vim-highlightedyank' let g:highlightedyank_highlight_duration = 200 "[Needed only with old vim versions]" if !exists('##TextYankPost') map y (highlightedyank) endif "[Autodetect indent style of a file]" Plugin 'tcbbd/detectindent' let g:detectindent_preferred_indent=4 let g:detectindent_autodetect=1 call vundle#end() endif " Allow backspacing over everything in insert mode. set backspace=indent,eol,start set number set relativenumber "[Hide/show the white-space and more invisible symbols]" set list set listchars=tab:▸\ ,nbsp:¬,trail:- " | | + Trailing spaces " | + Non breakable spaces " + Tabulations: `tab xy`, x: first char, y: following chars set nojoinspaces "[Indent & Tab/mode-line settings]" set breakindent set nopaste set smarttab set tabstop=4 " tabs size on screen " set expandtab " inserts spaces " set autoindent set copyindent " copy existing tab/spaces mix on newline " set smartindent " overruled by cindent " set cinwords=except,finally,def,class,with,do,if,elif,else,for,while,try,switch set cinoptions+=l1 " switch case label alignement, :h cinoptions-values " set shiftwidth=4 " number of space to use on indent. Use tabstop if 0" "set softtabstop=4 "[Matching chars]" set showmatch set matchpairs=\":\" set matchpairs+=(:) set matchpairs+={:} set matchpairs+=[:] "[TextWidth settings]" set textwidth=0 "[Look for a single modeline in files]" set modeline set modelines=1 set ruler " show the cursor position all the time set showcmd " display incomplete commands set laststatus=2 set noshowmode "[Command mode autocompletion]" set wildmenu set wildmode=longest:full,full " `------------|---- First complete till longest common string, open wildmenu " `---- Then, complete next full match set ttimeout " time out for key codes set ttimeoutlen=100 " wait up to 100ms after Esc for special key "[Turn backup off and value of history]" set nobackup set noswapfile set history=1000 set nowritebackup set undolevels=5000 "[Setup history file]" set viminfo=%,<0,'10,/16,:16,h,f0 " | | | | | | + file marks 0-9,A-Z 0=NOT stored " | | | | | + disable 'hlsearch' loading viminfo " | | | | + command-line history saved " | | | + search history saved " | | + files marks saved " | + lines saved each register (old name for <, vi6.2): NOT STORED " + save/restore buffer list if !has('nvim') "[Declutter $HOME]" set viminfo+=n~/.vim/cache/.viminfo endif " Show @@@ in the last line if it is truncated. set display=truncate "[Splitting rules]" set splitbelow set splitright set equalalways " Show a few lines of context around the cursor. set scrolloff=5 " Try to keep the cursor in the same column while scrolling set nostartofline set autochdir set autoread set autowrite "[Shared with OS clipboard]" set clipboard=unnamed "[For regular expressions turn magic on, use \v to get regex parent]" set magic "[Search settings]" set hlsearch set incsearch set smartcase set ignorecase set wrapscan "[When on, the ":substitute" flag 'g' is default on]" set nogdefault "[Enable realtime feedback for substitution]" if has("nvim") set inccommand=nosplit endif "[Kitty doesn't support background color erase]" let &t_ut='' let base16colorspace=256 set background=dark colorscheme base16-default-dark "[Fix background transparency]" if has("autocmd") autocmd ColorScheme * highlight Normal ctermbg=None autocmd ColorScheme * highlight NonText ctermbg=None endif "[Define the leader key]" let mapleader="," let maplocalleader="," "[Reselect visual block after indent/outdent]" vnoremap < >gv "[Improve up/down movement on wrapped lines]" "[If preceded by a count, jump actual lines. Also if > 5, save to jumplist]" nnoremap j v:count ? (v:count > 5 ? "m'" . v:count : '') . 'j' : 'gj' nnoremap k v:count ? (v:count > 5 ? "m'" . v:count : '') . 'k' : 'gk' "[Easy split navigation]" nnoremap j nnoremap k nnoremap h nnoremap l nnoremap k nnoremap j nnoremap h nnoremap l "[Locate the desired objects in the center of the screen]" nnoremap n nzz nnoremap N Nzz nnoremap * *zz nnoremap # #zz "[New line under/bellow current line without jump to insert-mode]" nnoremap o o nnoremap O O "[Clear search highlights]" nnoremap // :nohlsearch "[Reflow current paragraph]" "[http://stevelosh.com/blog/2010/09/coming-home-to-vim/]" nnoremap q :call ReflowParagraph() " http://stackoverflow.com/questions/1005/getting-root-permissions-on-a-file-inside-of-vi cmap w!! w !sudo tee >/dev/null % "[To disable the arrow keys]" for prefix in ['i', 'n', 'v'] for key in ['', '', '', ''] execute prefix . "noremap " . key . " " endfor endfor "[Switch quickly between source and header]" nnoremap f :e =SwapExtension() " Do incremental searching when it's possible to timeout. if has('reltime') set incsearch endif " LaTeX ftdetect let g:tex_flavor = "latex" " Switch syntax highlighting on when the terminal has colors or when using the " GUI (which always has colors). if &t_Co > 2 || has("gui_running") " Revert with ":syntax off". syntax on " I like highlighting strings inside C comments. " Revert with ":unlet c_comment_strings". let c_comment_strings=1 endif "[Reflow current paragraph]" function! ReflowParagraph() let l:view = winsaveview() normal gwip call winrestview(l:view) endfunction "[Remove tabs and spaces at the end of lines]" function! DeleteTrailingTWS() "[Do not clean up trailing spaces in binary mode or in diff files]" if &binary || &ft =~ 'diff' return endif let l:view = winsaveview() silent %s/[ \t]*$//g silent %s/\s\+$//ge call winrestview(l:view) endfunction "[Make the scripts executable]" function! ChangeScriptMode() if getline(1) =~ "#!" if getline(1) =~ "bin/" silent !chmod +x endif endif endfunction "[Swap file extensions, for example cpp/h]" "https://stackoverflow.com/a/22145246" function! SwapExtension() let [rest, ext] = [expand('%:r'), expand('%:e')] if ext ==? 'h' if filereadable(rest . '.c') let ext = 'c' elseif filereadable(rest . '.cpp') let ext = 'cpp' endif elseif ext ==? 'cpp' || ext ==? 'c' let ext = 'h' "swap between vertex and fragment shader" elseif ext ==? 'vsh' let ext = 'fsh' elseif ext ==? 'fsh' let ext = 'vsh' endif return rest . '.' . ext endfunction " Only do this part when compiled with support for autocommands. if has("autocmd") " 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. " Revert with ":filetype off". filetype plugin indent on " Put these in an autocmd group, so that you can revert them with: " ":augroup vimStartup | au! | augroup END" augroup vimStartup au! " When editing a file, always jump to the last known cursor position. " Don't do it when the position is invalid, when inside an event handler " (happens when dropping a file on gvim) and for a commit message (it's " likely a different one than last time). autocmd BufReadPost * \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' | \ exe "normal! g`\"" | \ endif augroup END "[Try not to pollute the undo tree (https://vi.stackexchange.com/a/13401)]" autocmd BufWritePre * \ try | \ undojoin | \ catch /^Vim\%((\a\+)\)\=:E790/ | \ finally | \ call DeleteTrailingTWS() | \ endtry if has("unix") || has("mac") autocmd BufWritePost * call ChangeScriptMode() endif endif " has("autocmd") " Enable bépo layout if detected silent call system("detectbepo") if v:shell_error == 0 source ~/.vim/bepo.vim endif