├── README.md ├── colors └── default.vim ├── ftdetect └── vimrc.vim └── plugin └── vimrc.vim /README.md: -------------------------------------------------------------------------------- 1 | # vimrc.vim 2 | 3 | This plugin replaces lion's share of your `.vimrc`. A superset of [`vim-sensible`](https://github.com/tpope/vim-sensible). 4 | 5 | ## Installation 6 | 7 | Just include with some package manager. For example if you use vim-plug, then write: 8 | 9 | ``` 10 | Plug 'sheerun/vimrc' 11 | ``` 12 | 13 | I recommend to use: 14 | 15 | - Set your leader to space 16 | - [vim-plug](https://github.com/junegunn/vim-plug) as lightweight plugin manager 17 | - [vim-polyglot](https://github.com/sheerun/vim-polyglot) for syntax highlighting 18 | 19 | An example of simple `.vimrc` file: 20 | 21 | ```vim 22 | " Select your Leader key 23 | let mapleader = "\" 24 | 25 | call plug#begin() 26 | 27 | Plug 'sheerun/vimrc' 28 | Plug 'sheerun/vim-polyglot' 29 | 30 | call plug#end() 31 | ``` 32 | 33 | ## Features 34 | 35 | Every set default setting is documented in the source. You can read it [here](https://github.com/sheerun/vimrc/blob/master/ftdetect/vimrc.vim) and [here](https://github.com/sheerun/vimrc/blob/master/plugin/vimrc.vim) 36 | 37 | ## License 38 | 39 | The same terms as Vim itself. See `:help license`. 40 | -------------------------------------------------------------------------------- /colors/default.vim: -------------------------------------------------------------------------------- 1 | "" Color Scheme 2 | 3 | " Vim color file 4 | " Original Maintainer: Lars H. Nielsen (dengmao@gmail.com) 5 | " Last Change: 2014-05-31 6 | " 7 | " Modified version of wombat for 256-color terminals by 8 | " Adam Stankiewicz (sheerun@sher.pl) 9 | " Modified version of wombat for 256-color terminals by 10 | " David Liang (bmdavll@gmail.com) 11 | " based on version by 12 | " Danila Bespalov (danila.bespalov@gmail.com) 13 | 14 | set background=dark 15 | 16 | if version > 580 17 | hi clear 18 | if exists("syntax_on") 19 | syntax reset 20 | endif 21 | endif 22 | 23 | " General colors 24 | hi Normal ctermfg=252 ctermbg=234 cterm=none guifg=#e3e0d7 guibg=#242424 gui=none 25 | hi Cursor ctermfg=234 ctermbg=228 cterm=none guifg=#242424 guibg=#eae788 gui=none 26 | hi Visual ctermfg=251 ctermbg=239 cterm=none guifg=#c3c6ca guibg=#554d4b gui=none 27 | hi VisualNOS ctermfg=251 ctermbg=236 cterm=none guifg=#c3c6ca guibg=#303030 gui=none 28 | hi Search ctermfg=177 ctermbg=241 cterm=none guifg=#d787ff guibg=#636066 gui=none 29 | hi Folded ctermfg=103 ctermbg=237 cterm=none guifg=#a0a8b0 guibg=#3a4046 gui=none 30 | hi Title ctermfg=230 cterm=bold guifg=#ffffd7 gui=bold 31 | hi StatusLine ctermfg=230 ctermbg=238 cterm=none guifg=#ffffd7 guibg=#444444 gui=italic 32 | hi VertSplit ctermfg=238 ctermbg=238 cterm=none guifg=#444444 guibg=#444444 gui=none 33 | hi StatusLineNC ctermfg=241 ctermbg=238 cterm=none guifg=#857b6f guibg=#444444 gui=none 34 | hi LineNr ctermfg=241 ctermbg=232 cterm=none guifg=#857b6f guibg=#080808 gui=none term=none 35 | hi SpecialKey ctermfg=241 ctermbg=235 cterm=none guifg=#626262 guibg=#2b2b2b gui=none 36 | hi WarningMsg ctermfg=203 guifg=#ff5f55 37 | hi ErrorMsg ctermfg=196 ctermbg=234 cterm=bold guifg=#e3e0d7 guibg=#3a3a3a gui=bold 38 | hi SpellBad ctermfg=196 ctermbg=234 cterm=bold guifg=#e3e0d7 guibg=#3a3a3a gui=bold 39 | hi SpellCap ctermfg=196 ctermbg=234 cterm=bold guifg=#e3e0d7 guibg=#3a3a3a gui=bold 40 | 41 | " Vim >= 7.0 specific colors 42 | if version >= 700 43 | hi CursorLine ctermbg=236 cterm=none guibg=#32322f 44 | hi CursorLineNr ctermbg=234 cterm=none guibg=#242424 gui=none 45 | hi MatchParen ctermfg=228 ctermbg=101 cterm=bold guifg=#eae788 guibg=#857b6f gui=bold 46 | hi Pmenu ctermfg=230 ctermbg=238 guifg=#ffffd7 guibg=#444444 47 | hi PmenuSel ctermfg=232 ctermbg=192 guifg=#080808 guibg=#cae982 48 | endif 49 | 50 | " Diff highlighting 51 | hi DiffAdd ctermbg=17 guibg=#2a0d6a 52 | hi DiffDelete ctermfg=234 ctermbg=60 cterm=none guifg=#242424 guibg=#3e3969 gui=none 53 | hi DiffText ctermbg=53 cterm=none guibg=#73186e gui=none 54 | hi DiffChange ctermbg=237 guibg=#382a37 55 | 56 | "hi CursorIM 57 | "hi Directory 58 | "hi IncSearch 59 | "hi Menu 60 | "hi ModeMsg 61 | "hi MoreMsg 62 | "hi PmenuSbar 63 | "hi PmenuThumb 64 | "hi Question 65 | "hi Scrollbar 66 | "hi SignColumn 67 | "hi SpellBad 68 | "hi SpellCap 69 | "hi SpellLocal 70 | "hi SpellRare 71 | "hi TabLine 72 | "hi TabLineFill 73 | "hi TabLineSel 74 | "hi Tooltip 75 | "hi User1 76 | "hi User9 77 | "hi WildMenu 78 | 79 | 80 | " Syntax highlighting 81 | hi Keyword ctermfg=111 cterm=none guifg=#88b8f6 gui=none 82 | hi Statement ctermfg=111 cterm=none guifg=#88b8f6 gui=none 83 | hi Constant ctermfg=173 cterm=none guifg=#e5786d gui=none 84 | hi Number ctermfg=173 cterm=none guifg=#e5786d gui=none 85 | hi PreProc ctermfg=173 cterm=none guifg=#e5786d gui=none 86 | hi Function ctermfg=192 cterm=none guifg=#cae982 gui=none 87 | hi Identifier ctermfg=192 cterm=none guifg=#cae982 gui=none 88 | hi Type ctermfg=186 cterm=none guifg=#d4d987 gui=none 89 | hi Special ctermfg=229 cterm=none guifg=#eadead gui=none 90 | hi String ctermfg=113 cterm=none guifg=#95e454 gui=italic 91 | hi Comment ctermfg=246 cterm=none guifg=#9c998e gui=italic 92 | hi Todo ctermfg=101 cterm=none guifg=#857b6f gui=italic 93 | 94 | 95 | " Links 96 | hi! link FoldColumn Folded 97 | hi! link CursorColumn CursorLine 98 | hi! link NonText LineNr 99 | hi! link SignColumn LineNr 100 | hi! link CocErrorHighlight ErrorMsg 101 | hi! link CocWarningHighlight WarningMsg 102 | -------------------------------------------------------------------------------- /ftdetect/vimrc.vim: -------------------------------------------------------------------------------- 1 | " Set mapleader to space by default, early so all mappings by plugins are set 2 | if !exists("mapleader") 3 | let mapleader = "\" 4 | endif 5 | -------------------------------------------------------------------------------- /plugin/vimrc.vim: -------------------------------------------------------------------------------- 1 | " sensible.vim - Defaults everyone can agree on, with extras 2 | " Maintainer: Adam Stankiewicz 3 | 4 | if exists('g:loaded_vimrc') || &compatible 5 | finish 6 | else 7 | let g:loaded_vimrc = 'yes' 8 | endif 9 | 10 | " Set mapleader to space by default, early so all mappings by plugins are set 11 | if !exists("mapleader") 12 | let mapleader = "\" 13 | endif 14 | 15 | " Disable strange Vi defaults. 16 | set nocompatible 17 | 18 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' 19 | "" Basics (from vim-sensible) 20 | 21 | " Autoindent when starting new line, or using `o` or `O`. 22 | set autoindent 23 | 24 | " Allow backspace in insert mode. 25 | set backspace=indent,eol,start 26 | 27 | " Don't scan included files. The .tags file is more performant. 28 | set complete-=i 29 | 30 | " Use 'shiftwidth' when using `` in front of a line. 31 | " By default it's used only for shift commands (`<`, `>`). 32 | set smarttab 33 | 34 | " Disable octal format for number processing. 35 | set nrformats-=octal 36 | 37 | " Allow for mappings including `Esc`, while preserving 38 | " zero timeout after pressing it manually. 39 | " (only vim needs a fix for this) 40 | if !has('nvim') && &ttimeoutlen == -1 41 | set ttimeout 42 | set ttimeoutlen=100 43 | endif 44 | 45 | " Enable highlighted case-insensitive incremential search. 46 | set incsearch 47 | 48 | " Use to clear the highlighting of :set hlsearch. 49 | if maparg('', 'n') ==# '' 50 | nnoremap :nohlsearch=has('diff')?'diffupdate':'' 51 | endif 52 | 53 | " Always show window statuses, even if there's only one. 54 | set laststatus=2 55 | 56 | " Show the line and column number of the cursor position. 57 | set ruler 58 | 59 | " Autocomplete commands using nice menu in place of window status. 60 | " Enable `Ctrl-N` and `Ctrl-P` to scroll through matches. 61 | set wildmenu 62 | 63 | " Keep 5 columns next to the cursor when scrolling horizontally. 64 | if !&scrolloff 65 | set scrolloff=1 66 | endif 67 | if !&sidescrolloff 68 | set sidescrolloff=5 69 | endif 70 | 71 | " When 'wrap' is on, display last line even if it doesn't fit. 72 | set display+=lastline 73 | 74 | " Force utf-8 encoding 75 | set encoding=utf-8 76 | 77 | " Set default whitespace characters when using `:set list` 78 | if &listchars ==# 'eol:$' 79 | set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+ 80 | endif 81 | 82 | " Delete comment character when joining commented lines 83 | if v:version > 703 || v:version == 703 && has("patch541") 84 | set formatoptions+=j 85 | endif 86 | 87 | " Search upwards for tags file instead only locally 88 | if has('path_extra') 89 | setglobal tags-=./tags tags-=./tags; tags^=./tags; 90 | endif 91 | 92 | " Fix issues with fish shell 93 | " https://github.com/tpope/vim-sensible/issues/50 94 | if &shell =~# 'fish$' && (v:version < 704 || v:version == 704 && !has('patch276')) 95 | set shell=/usr/bin/env\ bash 96 | endif 97 | 98 | " Reload unchanged files automatically. 99 | set autoread 100 | 101 | " Increase history size to 1000 items. 102 | if &history < 1000 103 | set history=1000 104 | endif 105 | 106 | " Allow for up to 50 opened tabs on Vim start. 107 | if &tabpagemax < 50 108 | set tabpagemax=50 109 | endif 110 | 111 | " Always save upper case variables to viminfo file. 112 | if !empty(&viminfo) 113 | set viminfo^=! 114 | endif 115 | 116 | " Don't save options in sessions and views 117 | set sessionoptions-=options 118 | set viewoptions-=options 119 | 120 | " Allow color schemes to do bright colors without forcing bold. 121 | if &t_Co == 8 && $TERM !~# '^Eterm' 122 | set t_Co=16 123 | endif 124 | 125 | " Load matchit.vim, but only if the user hasn't installed a newer version. 126 | if !exists('g:loaded_matchit') && findfile('plugin/matchit.vim', &rtp) ==# '' 127 | runtime! macros/matchit.vim 128 | endif 129 | 130 | " `Ctrl-U` in insert mode deletes a lot. Use `Ctrl-G` u to first break undo, 131 | " so that you can undo `Ctrl-U` without undoing what you typed before it. 132 | if empty(mapcheck('', 'i')) 133 | inoremap u 134 | endif 135 | 136 | if empty(mapcheck('', 'i')) 137 | inoremap u 138 | endif 139 | 140 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' 141 | "" Extras 142 | 143 | " Improve displayed color if supported by terminal 144 | if &t_Co >= 256 145 | set termguicolors 146 | end 147 | 148 | " Indent using two spaces. 149 | if &tabstop == 8 && &shiftwidth == 8 150 | set tabstop=2 151 | set shiftwidth=2 152 | endif 153 | 154 | " Enable undofile and set undodir and backupdir 155 | let s:dir = has('win32') ? '$APPDATA/Vim' : isdirectory($HOME.'/Library') ? '~/Library/Vim' : empty($XDG_DATA_HOME) ? '~/.local/share/vim' : '$XDG_DATA_HOME/vim' 156 | let &backupdir = expand(s:dir) . '/backup//' 157 | let &undodir = expand(s:dir) . '/undo//' 158 | set undofile 159 | 160 | " Automatically create directories for backup and undo files. 161 | if !isdirectory(expand(s:dir)) 162 | call system("mkdir -p " . expand(s:dir) . "/{backup,undo}") 163 | end 164 | 165 | " Set monako font if using macvim 166 | if has("gui_macvim") 167 | set guifont=Monaco:h13 168 | endif 169 | 170 | " Keep flags when repeating last substitute command. 171 | nnoremap & :&& 172 | xnoremap & :&& 173 | 174 | " Y yanks from the cursor to the end of line as expected. See :help Y. 175 | nnoremap Y y$ 176 | 177 | " Highlight line under cursor. It helps with navigation. 178 | set cursorline 179 | set cursorlineopt=number 180 | 181 | " Keep 8 lines above or below the cursor when scrolling. 182 | set scrolloff=8 183 | 184 | " Set minimum window size to 79x5. 185 | set winwidth=79 186 | set winheight=5 187 | set winminheight=5 188 | 189 | " If opening buffer, search first in opened windows. 190 | set switchbuf=usetab 191 | 192 | " Hide buffers instead of asking if to save them. 193 | set hidden 194 | 195 | " Wrap lines by default 196 | set wrap linebreak 197 | set showbreak=" " 198 | 199 | " Allow easy navigation between wrapped lines. 200 | vmap j gj 201 | vmap k gk 202 | nmap j gj 203 | nmap k gk 204 | 205 | " For autocompletion, complete as much as you can. 206 | set wildmode=longest,full 207 | 208 | " Show line numbers on the sidebar. 209 | set number 210 | 211 | " Disable any annoying beeps on errors. 212 | set noerrorbells 213 | set visualbell 214 | 215 | " Don't parse modelines (google "vim modeline vulnerability"). 216 | set nomodeline 217 | 218 | " Do not fold by default. But if, do it up to 3 levels. 219 | set foldmethod=indent 220 | set foldnestmax=3 221 | set nofoldenable 222 | 223 | " Enable mouse for scrolling and window resizing. 224 | set mouse=a 225 | 226 | " This is needed to avoid swapfile warning when auto-reloading 227 | set shortmess+=A 228 | 229 | " Avoids swapfiles in current directory 230 | if &directory =~# '^\.,' 231 | if !empty($HOME) 232 | if has('win32') 233 | let &directory = expand('$HOME/vimfiles') . '//,' . &directory 234 | else 235 | let &directory = expand('$HOME/.vim') . '//,' . &directory 236 | endif 237 | endif 238 | if !empty($XDG_DATA_HOME) 239 | let &directory = expand('$XDG_DATA_HOME') . '//,' . &directory 240 | endif 241 | if has('macunix') 242 | let &directory = expand('$HOME/Library/Autosave Information') . '//,' . &directory 243 | endif 244 | endif 245 | 246 | " Save up to 100 marks, enable capital marks. 247 | set viminfo='100,f1 248 | 249 | " Enable search highlighting. 250 | set hlsearch 251 | 252 | " Ignore case when searching. 253 | set ignorecase 254 | 255 | " Show mode in statusbar, not separately. 256 | set noshowmode 257 | 258 | " Don't ignore case when search has capital letter 259 | " (although also don't ignore case by default). 260 | set smartcase 261 | 262 | " Use dash as word separator. 263 | set iskeyword+=- 264 | 265 | " Add gems.tags to files searched for tags. 266 | set tags+=gems.tags 267 | 268 | " Disable output, vcs, archive, rails, temp and backup files. 269 | set wildignore+=*.o,*.out,*.obj,.git,*.rbc,*.rbo,*.class,.svn,*.gem 270 | set wildignore+=*.zip,*.tar.gz,*.tar.bz2,*.rar,*.tar.xz 271 | set wildignore+=*/vendor/gems/*,*/vendor/cache/*,*/.bundle/*,*/.sass-cache/* 272 | set wildignore+=*.swp,*~,._* 273 | 274 | " Auto center on matched string. 275 | noremap n nzz 276 | noremap N Nzz 277 | 278 | " Visually select the text that was last edited/pasted (Vimcast#26). 279 | noremap gV `[v`] 280 | 281 | " Expand %% to path of current buffer in command mode. 282 | cnoremap %% getcmdtype() == ':' ? expand('%:h').'/' : '%%' 283 | 284 | " Enable saving by `Ctrl-s` 285 | nnoremap :w 286 | inoremap :w 287 | 288 | " Set window title by default. 289 | set title 290 | 291 | " Always focus on splited window. 292 | set splitright 293 | set splitbelow 294 | 295 | " Don't display the intro message on starting Vim. 296 | set shortmess+=I 297 | 298 | " Allow for easy copying and pasting 299 | vnoremap y y`] 300 | nnoremap p p`] 301 | 302 | " Make sure pasting in visual mode doesn't replace paste buffer 303 | function! RestoreRegister() 304 | let @" = s:restore_reg 305 | return '' 306 | endfunction 307 | function! s:Repl() 308 | let s:restore_reg = @" 309 | return "p@=RestoreRegister()\" 310 | endfunction 311 | vmap p Repl() 312 | 313 | " Prevent common mistake of pressing q: instead :q 314 | map q: :q 315 | 316 | " Make a simple "search" text object. 317 | " http://vim.wikia.com/wiki/Copy_or_change_search_hit 318 | " It allows for replacing search matches with cs and then /././. 319 | vnoremap s //e=&selection=='exclusive'?'+1':'' 320 | \:call histdel('search',-1)let @/=histget('search',-1)gv 321 | omap s :normal vs 322 | 323 | " Disable writebackup because some tools have issues with it: 324 | " https://github.com/neoclide/coc.nvim/issues/649 325 | set nowritebackup 326 | 327 | " Reduce updatetime from 4000 to 300 to avoid issues with coc.nvim 328 | set updatetime=300 329 | 330 | " Auto reload if file was changed somewhere else (for autoread) 331 | au FocusGained,BufEnter,CursorHold,CursorHoldI * if !bufexists("[Command Line]") | checktime | endif 332 | 333 | " Merge signcolumn with number line (if supported) 334 | if has("patch-8.1.1564") 335 | set signcolumn=number 336 | endif 337 | 338 | " Enable default theme if some other is not set 339 | if !exists("g:colors_name") 340 | colorscheme default 341 | endif 342 | 343 | " Change default theme for lightline to match default for colorscheme 344 | if !exists("g:lightline") 345 | let g:lightline = { 'colorscheme': 'powerlineish' } 346 | end 347 | 348 | " Also set better lightline layout 349 | if !has_key(g:lightline, 'active') 350 | let g:lightline['active'] = { 351 | \ 'left': [['mode', 'paste'], ['readonly', 'relativepath', 'modified']], 352 | \ 'right': [ [], [ 'gitbranch' ], [ 'filetype' ]] 353 | \ } 354 | let g:lightline['component'] = { 'filetype': '%{&filetype}' } 355 | let g:lightline['component_function'] = { 'gitbranch': 'fugitive#head' } 356 | endif 357 | --------------------------------------------------------------------------------