diff --git a/dotfiles/.vim/colors.vim b/dotfiles/.vim/colors.vim new file mode 100644 index 00000000..bff86730 --- /dev/null +++ b/dotfiles/.vim/colors.vim @@ -0,0 +1,287 @@ +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" +" New Start: A modern Arch workflow built with an emphasis on functionality. +" Copyright (C) 2017 Donovan Glover +" +" base16-vim: Base16 for Vim +" Copyright (C) 2012 Chris Kempson +" https://github.com/chriskempson/base16-vim +" +" This program is free software: you can redistribute it and/or modify +" it under the terms of the GNU General Public License as published by +" the Free Software Foundation, either version 3 of the License, or +" (at your option) any later version. +" +" This program is distributed in the hope that it will be useful, +" but WITHOUT ANY WARRANTY; without even the implied warranty of +" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +" GNU General Public License for more details. +" +" You should have received a copy of the GNU General Public License +" along with this program. If not, see . +" +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +" This is a modified version of Chris Kempson's base16-vim that removes a lot of +" the settings you don't need when using your terminal's colors as the color scheme. + +" Main colors +let s:cterm00 = "00" +let s:cterm03 = "08" +let s:cterm05 = "07" +let s:cterm07 = "15" +let s:cterm08 = "01" +let s:cterm0A = "03" +let s:cterm0B = "02" +let s:cterm0C = "06" +let s:cterm0D = "04" +let s:cterm0E = "05" +" Extra colors +let s:cterm01 = "18" " 10 without 256 colors +let s:cterm02 = "19" " 11 +let s:cterm04 = "20" " 12 +let s:cterm06 = "21" " 13 +let s:cterm09 = "16" " 09 +let s:cterm0F = "17" " 14 + +" Highlighting function +fun hi(group, ctermfg, ctermbg, attr) + if a:ctermfg != "" + exec "hi " . a:group . " ctermfg=" . a:ctermfg + endif + if a:ctermbg != "" + exec "hi " . a:group . " ctermbg=" . a:ctermbg + endif + if a:attr != "" + exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr + endif +endfun + +" Vim editor colors +call hi("Normal", s:cterm05, s:cterm00, "") +call hi("Bold", "", "", "bold") +call hi("Debug", s:cterm08, "", "") +call hi("Directory", s:cterm0D, "", "") +call hi("Error", s:cterm00, s:cterm08, "") +call hi("ErrorMsg", s:cterm08, s:cterm00, "") +call hi("Exception", s:cterm08, "", "") +call hi("FoldColumn", s:cterm0C, s:cterm01, "") +call hi("Folded", s:cterm03, s:cterm01, "") +call hi("IncSearch", s:cterm01, s:cterm09, "none") +call hi("Italic", "", "", "none") +call hi("Macro", s:cterm08, "", "") +call hi("MatchParen", "", s:cterm03, "") +call hi("ModeMsg", s:cterm0B, "", "") +call hi("MoreMsg", s:cterm0B, "", "") +call hi("Question", s:cterm0D, "", "") +call hi("Search", s:cterm03, s:cterm0A, "") +call hi("Substitute", s:cterm03, s:cterm0A, "none") +call hi("SpecialKey", s:cterm03, "", "") +call hi("TooLong", s:cterm08, "", "") +call hi("Underlined", s:cterm08, "", "") +call hi("Visual", "", s:cterm02, "") +call hi("VisualNOS", s:cterm08, "", "") +call hi("WarningMsg", s:cterm08, "", "") +call hi("WildMenu", s:cterm08, "", "") +call hi("Title", s:cterm0D, "", "none") +call hi("Conceal", s:cterm0D, s:cterm00, "") +call hi("Cursor", s:cterm00, s:cterm05, "") +call hi("NonText", s:cterm03, "", "") +call hi("LineNr", s:cterm03, s:cterm01, "") +call hi("SignColumn", s:cterm03, s:cterm01, "") +call hi("StatusLine", s:cterm04, s:cterm02, "none") +call hi("StatusLineNC", s:cterm03, s:cterm01, "none") +call hi("VertSplit", s:cterm02, s:cterm02, "none") +call hi("ColorColumn", "", s:cterm01, "none") +call hi("CursorColumn", "", s:cterm01, "none") +call hi("CursorLine", "", s:cterm01, "none") +call hi("CursorLineNr", s:cterm04, s:cterm01, "") +call hi("QuickFixLine", "", s:cterm01, "none") +call hi("PMenu", s:cterm05, s:cterm01, "none") +call hi("PMenuSel", s:cterm01, s:cterm05, "") +call hi("TabLine", s:cterm03, s:cterm01, "none") +call hi("TabLineFill", s:cterm03, s:cterm01, "none") +call hi("TabLineSel", s:cterm0B, s:cterm01, "none") + +" Standard syntax highlighting +call hi("Boolean", s:cterm09, "", "") +call hi("Character", s:cterm08, "", "") +call hi("Comment", s:cterm03, "", "") +call hi("Conditional", s:cterm0E, "", "") +call hi("Constant", s:cterm09, "", "") +call hi("Define", s:cterm0E, "", "none") +call hi("Delimiter", s:cterm0F, "", "") +call hi("Float", s:cterm09, "", "") +call hi("Function", s:cterm0D, "", "") +call hi("Identifier", s:cterm08, "", "none") +call hi("Include", s:cterm0D, "", "") +call hi("Keyword", s:cterm0E, "", "") +call hi("Label", s:cterm0A, "", "") +call hi("Number", s:cterm09, "", "") +call hi("Operator", s:cterm05, "", "none") +call hi("PreProc", s:cterm0A, "", "") +call hi("Repeat", s:cterm0A, "", "") +call hi("Special", s:cterm0C, "", "") +call hi("SpecialChar", s:cterm0F, "", "") +call hi("Statement", s:cterm08, "", "") +call hi("StorageClass", s:cterm0A, "", "") +call hi("String", s:cterm0B, "", "") +call hi("Structure", s:cterm0E, "", "") +call hi("Tag", s:cterm0A, "", "") +call hi("Todo", s:cterm0A, s:cterm01, "") +call hi("Type", s:cterm0A, "", "none") +call hi("Typedef", s:cterm0A, "", "") + +" C highlighting +call hi("cOperator", s:cterm0C, "", "") +call hi("cPreCondit", s:cterm0E, "", "") + +" C# highlighting +call hi("csClass", s:cterm0A, "", "") +call hi("csAttribute", s:cterm0A, "", "") +call hi("csModifier", s:cterm0E, "", "") +call hi("csType", s:cterm08, "", "") +call hi("csUnspecifiedStatement", s:cterm0D, "", "") +call hi("csContextualStatement", s:cterm0E, "", "") +call hi("csNewDecleration", s:cterm08, "", "") + +" CSS highlighting +call hi("cssBraces", s:cterm05, "", "") +call hi("cssClassName", s:cterm0E, "", "") +call hi("cssColor", s:cterm0C, "", "") + +" Diff highlighting +call hi("DiffAdd", s:cterm0B, s:cterm01, "") +call hi("DiffChange", s:cterm03, s:cterm01, "") +call hi("DiffDelete", s:cterm08, s:cterm01, "") +call hi("DiffText", s:cterm0D, s:cterm01, "") +call hi("DiffAdded", s:cterm0B, s:cterm00, "") +call hi("DiffFile", s:cterm08, s:cterm00, "") +call hi("DiffNewFile", s:cterm0B, s:cterm00, "") +call hi("DiffLine", s:cterm0D, s:cterm00, "") +call hi("DiffRemoved", s:cterm08, s:cterm00, "") + +" Git highlighting +call hi("gitcommitOverflow", s:cterm08, "", "") +call hi("gitcommitSummary", s:cterm0B, "", "") +call hi("gitcommitComment", s:cterm03, "", "") +call hi("gitcommitUntracked", s:cterm03, "", "") +call hi("gitcommitDiscarded", s:cterm03, "", "") +call hi("gitcommitSelected", s:cterm03, "", "") +call hi("gitcommitHeader", s:cterm0E, "", "") +call hi("gitcommitSelectedType", s:cterm0D, "", "") +call hi("gitcommitUnmergedType", s:cterm0D, "", "") +call hi("gitcommitDiscardedType", s:cterm0D, "", "") +call hi("gitcommitBranch", s:cterm09, "", "bold") +call hi("gitcommitUntrackedFile", s:cterm0A, "", "") +call hi("gitcommitUnmergedFile", s:cterm08, "", "bold") +call hi("gitcommitDiscardedFile", s:cterm08, "", "bold") +call hi("gitcommitSelectedFile", s:cterm0B, "", "bold") + +" GitGutter highlighting +call hi("GitGutterAdd", s:cterm0B, s:cterm01, "") +call hi("GitGutterChange", s:cterm0D, s:cterm01, "") +call hi("GitGutterDelete", s:cterm08, s:cterm01, "") +call hi("GitGutterChangeDelete", s:cterm0E, s:cterm01, "") + +" HTML highlighting +call hi("htmlBold", s:cterm0A, "", "") +call hi("htmlItalic", s:cterm0E, "", "") +call hi("htmlEndTag", s:cterm05, "", "") +call hi("htmlTag", s:cterm05, "", "") + +" JavaScript highlighting +call hi("javaScript", s:cterm05, "", "") +call hi("javaScriptBraces", s:cterm05, "", "") +call hi("javaScriptNumber", s:cterm09, "", "") +" pangloss/vim-javascript highlighting +call hi("jsOperator", s:cterm0D, "", "") +call hi("jsStatement", s:cterm0E, "", "") +call hi("jsReturn", s:cterm0E, "", "") +call hi("jsThis", s:cterm08, "", "") +call hi("jsClassDefinition", s:cterm0A, "", "") +call hi("jsFunction", s:cterm0E, "", "") +call hi("jsFuncName", s:cterm0D, "", "") +call hi("jsFuncCall", s:cterm0D, "", "") +call hi("jsClassFuncName", s:cterm0D, "", "") +call hi("jsClassMethodType", s:cterm0E, "", "") +call hi("jsRegexpString", s:cterm0C, "", "") +call hi("jsGlobalObjects", s:cterm0A, "", "") +call hi("jsGlobalNodeObjects", s:cterm0A, "", "") +call hi("jsExceptions", s:cterm0A, "", "") +call hi("jsBuiltins", s:cterm0A, "", "") + +" Mail highlighting +call hi("mailQuoted1", s:cterm0A, "", "") +call hi("mailQuoted2", s:cterm0B, "", "") +call hi("mailQuoted3", s:cterm0E, "", "") +call hi("mailQuoted4", s:cterm0C, "", "") +call hi("mailQuoted5", s:cterm0D, "", "") +call hi("mailQuoted6", s:cterm0A, "", "") +call hi("mailURL", s:cterm0D, "", "") +call hi("mailEmail", s:cterm0D, "", "") + +" Markdown highlighting +call hi("markdownCode", s:cterm0B, "", "") +call hi("markdownError", s:cterm05, s:cterm00, "") +call hi("markdownCodeBlock", s:cterm0B, "", "") +call hi("markdownHeadingDelimiter", s:cterm0D, "", "") + +" NERDTree highlighting +call hi("NERDTreeDirSlash", s:cterm0D, "", "") +call hi("NERDTreeExecFile", s:cterm05, "", "") + +" PHP highlighting +call hi("phpMemberSelector", s:cterm05, "", "") +call hi("phpComparison", s:cterm05, "", "") +call hi("phpParent", s:cterm05, "", "") + +" Python highlighting +call hi("pythonOperator", s:cterm0E, "", "") +call hi("pythonRepeat", s:cterm0E, "", "") +call hi("pythonInclude", s:cterm0E, "", "") +call hi("pythonStatement", s:cterm0E, "", "") + +" Ruby highlighting +call hi("rubyAttribute", s:cterm0D, "", "") +call hi("rubyConstant", s:cterm0A, "", "") +call hi("rubyInterpolationDelimiter", s:cterm0F, "", "") +call hi("rubyRegexp", s:cterm0C, "", "") +call hi("rubySymbol", s:cterm0B, "", "") +call hi("rubyStringDelimiter", s:cterm0B, "", "") + +" SASS highlighting +call hi("sassidChar", s:cterm08, "", "") +call hi("sassClassChar", s:cterm09, "", "") +call hi("sassInclude", s:cterm0E, "", "") +call hi("sassMixing", s:cterm0E, "", "") +call hi("sassMixinName", s:cterm0D, "", "") + +" Signify highlighting +call hi("SignifySignAdd", s:cterm0B, s:cterm01, "") +call hi("SignifySignChange", s:cterm0D, s:cterm01, "") +call hi("SignifySignDelete", s:cterm08, s:cterm01, "") + +" Spelling highlighting +call hi("SpellBad", "", s:cterm00, "undercurl") +call hi("SpellLocal", "", s:cterm00, "undercurl") +call hi("SpellCap", "", s:cterm00, "undercurl") +call hi("SpellRare", "", s:cterm00, "undercurl") + +" Startify highlighting +call hi("StartifyBracket", s:cterm03, "", "") +call hi("StartifyFile", s:cterm07, "", "") +call hi("StartifyFooter", s:cterm03, "", "") +call hi("StartifyHeader", s:cterm0B, "", "") +call hi("StartifyNumber", s:cterm09, "", "") +call hi("StartifyPath", s:cterm03, "", "") +call hi("StartifySection", s:cterm0E, "", "") +call hi("StartifySelect", s:cterm0C, "", "") +call hi("StartifySlash", s:cterm03, "", "") +call hi("StartifySpecial", s:cterm03, "", "") + +" Remove functions +delf hi + +" Remove color variables +unlet s:cterm00 s:cterm01 s:cterm02 s:cterm03 s:cterm04 s:cterm05 s:cterm06 s:cterm07 s:cterm08 s:cterm09 s:cterm0A s:cterm0B s:cterm0C s:cterm0D s:cterm0E s:cterm0F diff --git a/dotfiles/.vim/config.vim b/dotfiles/.vim/config.vim new file mode 100644 index 00000000..8d0854cf --- /dev/null +++ b/dotfiles/.vim/config.vim @@ -0,0 +1,39 @@ +filetype plugin indent on " Attempt to determine the file type of extensionless files +syntax enable " Turn syntax highlighting on + +set nocompatible " Use vim defaults (i.e. ignore vi compatibility) +set backspace=indent,eol,start " Make the backspace key function as you would expect +set encoding=utf-8 " Always show files as utf-8 +set fileencoding=utf-8 " Ensure that we always save files as utf-8 + +set autoindent " Automatically indent new lines +set ignorecase " By default use case-insensitive search (combine with smartcase) +set smartcase " Make search case-sensitive when using capital letters +set showcmd " Always show the current keybinding being executed +set spell " Enable spell check by default + +set incsearch " Automatically move to text as you search for it +set wildmenu " Show a menu of the different options when you tab in command mode +set display+=lastline " Show as much of a long line as possible +set laststatus=0 " Disable the status line (removes filename and increases working space) + +set history=100 " Only keep the last 100 commands +set tabpagemax=50 " Set the maximum number of tabs to be opened in any window to 50 +set viminfo^=! " Use viminfo to store workspace and other data automatically +set sessionoptions-=options " When you explicitly save a workspace, save the entire environment + +set t_Co=256 " Tell vim that we want to use 256 colors +set scrolloff=1 " The minimal number of rows to show when scrolling up/down +set sidescrolloff=5 " The minimal number of columns to show when scrolling left/right + +set undofile " Keep track of undos even after you close a file +set undodir=~/.vim/undo " Save the undo history here (not that the directory must exist) +set undolevels=1000 " We can undo this many times +set undoreload=10000 " The maximum number of lines to keep in the undo file + +set tabstop=4 " Show a tab character as 4 spaces +set softtabstop=0 " Edit soft tabs as if they're regular spaces +set shiftwidth=4 " Make autoindent appear as 4 spaces + +set expandtab " When using , replace the tab character with 4 spaces +set smarttab " Always indent based on column number to align things easier diff --git a/dotfiles/.vim/ctags.vim b/dotfiles/.vim/ctags.vim new file mode 100644 index 00000000..a84114a6 --- /dev/null +++ b/dotfiles/.vim/ctags.vim @@ -0,0 +1,55 @@ +" Add elixir support to ctags +let g:tagbar_type_elixir = { + \ 'ctagstype' : 'elixir', + \ 'kinds' : [ + \ 'f:functions', + \ 'functions:functions', + \ 'c:callbacks', + \ 'd:delegates', + \ 'e:exceptions', + \ 'i:implementations', + \ 'a:macros', + \ 'o:operators', + \ 'm:modules', + \ 'p:protocols', + \ 'r:records', + \ 't:tests' + \ ] +\ } + +" Add rust support to ctags +let g:tagbar_type_rust = { + \ 'ctagstype' : 'rust', + \ 'kinds' : [ + \'T:types,type definitions', + \'f:functions,function definitions', + \'g:enum,enumeration names', + \'s:structure names', + \'m:modules,module names', + \'c:consts,static constants', + \'t:traits', + \'i:impls,trait implementations', + \] +\} + +" Add crystal support to ctags +let g:tagbar_type_crystal = { + \'ctagstype': 'crystal', + \'ctagsbin': 'crystalctags', + \'kinds': [ + \'c:classes', + \'m:modules', + \'d:defs', + \'x:macros', + \'l:libs', + \'s:sruct or unions', + \'f:fun' + \], + \'sro': '.', + \'kind2scope': { + \'c': 'namespace', + \'m': 'namespace', + \'l': 'namespace', + \'s': 'namespace' + \}, +\} diff --git a/dotfiles/.vim/keybindings.vim b/dotfiles/.vim/keybindings.vim new file mode 100644 index 00000000..7e8829a2 --- /dev/null +++ b/dotfiles/.vim/keybindings.vim @@ -0,0 +1,63 @@ +" Change the global leader to the space bar +let mapleader = ' ' + +" Easily switch between buffers +nnoremap gn :bn +nnoremap gp :bp +nnoremap gd :bd +" ================== Top row +"nnoremap +nnoremap q :Files +nnoremap w :Commits +nnoremap e :set nu! +nnoremap r :call matchadd('OverLength', '\%101v', 100) +nnoremap t :OverCommandLine%s/ +"nnoremap y +nnoremap u w +nnoremap i +nnoremap o +nnoremap p +" Easily show all git diffs +nnoremap [ :GFiles? +" Easily show all git files +nnoremap ] :GFiles +" Easily go through all the commits for a specific file +nnoremap \ :BCommits +" ================== Middle row +nnoremap a :NERDTreeToggle +"nnoremap s +nnoremap d :TagbarToggle +nnoremap f :VimFiler +nnoremap g :set hlsearch! +nnoremap h :Buffers +" Easily jump between lines in all open files +nnoremap j :Lines +" Easily jump between lines in the same file +nnoremap k :BLines +" Easily search for any line in all files in the project +nnoremap l :Ag +" Easily open new files in horizontal and vertical splits +nnoremap ; :split w :Files +nnoremap ' :vsplit w :Files +" ================== Bottom row +" Note that I personally don't use + z/x/c/n/m/,/. +nnoremap v :Ack! "\b\b" +"nnoremap b +nnoremap n o +nnoremap m O + +" Bind the right beautify function based on what file is open +autocmd FileType javascript map b :call JsBeautify() +autocmd FileType json map b :call JsonBeautify() +autocmd FileType jsx map b :call JsxBeautify() +autocmd FileType html map b :call HtmlBeautify() +autocmd FileType css map b :call CSSBeautify() + +" Easily enter 'zen mode' with Goyo and Pencil +" We have to explicitly set vertsplit again since Goyo resets it for some reason +nnoremap 2 :PencilSoft:Goyo:hi vertsplit ctermfg=8 ctermbg=none +nnoremap 3 :mksession! ~/.vim_session +nnoremap 4 :source ~/.vim_session +nnoremap 8 :15winc - +nnoremap 9 :15winc + +nnoremap 0 :winc = diff --git a/dotfiles/.vim/plugins.vim b/dotfiles/.vim/plugins.vim new file mode 100644 index 00000000..513269a8 --- /dev/null +++ b/dotfiles/.vim/plugins.vim @@ -0,0 +1,37 @@ +call plug#begin('~/.vim/plugged') " Use vim-plug as our package manager of choice + Plug 'airblade/vim-gitgutter' + Plug 'osyo-manga/vim-over' " Automatically highlight find and replace + Plug 'jiangmiao/auto-pairs' " Close brackets and other pairs automatically + Plug 'sukima/xmledit' " Automatically close tags when writing html + Plug 'w0rp/ale' " Automatically check language syntax for errors + Plug 'maksimr/vim-jsbeautify' " Make it easier to work with foreign code + Plug 'lervag/vimtex' " Make editing LaTeX a breeze + Plug 'dbeniamine/todo.txt-vim' " Easily manage any part of your todo.txt + Plug 'Kjwon15/vim-transparent' " Add transparency by default for all color schemes + Plug 'elixir-editors/vim-elixir' " Add syntax highlighting and autoindent for Elixir + + Plug 'tpope/vim-fugitive' " Add fugitive.vim, enabling us to use git in vim + Plug 'junegunn/fzf' " Add fuzzy finding to easily move between files + Plug 'junegunn/fzf.vim' " Add the vim functionality of fuzzy finding + + Plug 'rhysd/vim-crystal' " Add support for the crystal language + Plug 'scrooloose/nerdtree' " Add a file browser to vim + + Plug 'majutsushi/tagbar' " Add tagbar to show functions on the side + Plug 'lvht/tagbar-markdown' " Add support for markdown to tagbar + + Plug 'rust-lang/rust.vim' " Add rust support to vim + + Plug 'jamessan/vim-gnupg' " Easily use GPG encryption inside of vim + Plug 'reedes/vim-pencil' " Use vim as a tool for writing + Plug 'mileszs/ack.vim' " Testing ack.vim with ag + Plug 'tpope/vim-endwise' " Automatically add end + Plug 'junegunn/goyo.vim' " Distraction-free writing + Plug 'Yggdroot/indentLine' " Show indentation levels + + Plug 'Shougo/unite.vim' " Required by vimfiler + Plug 'Shougo/vimfiler.vim' " Yet another file explorer + + Plug 'mattn/emmet-vim' " Add emmet support + Plug 'sgur/vim-editorconfig' " Add editorconfig support +call plug#end() " Start the plugins diff --git a/dotfiles/.vimrc b/dotfiles/.vimrc index e3585eed..3e96d015 100644 --- a/dotfiles/.vimrc +++ b/dotfiles/.vimrc @@ -18,94 +18,14 @@ " """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" =================================== Plugins =================================== - -call plug#begin('~/.vim/plugged') " Use vim-plug as our package manager of choice - Plug 'airblade/vim-gitgutter' - Plug 'osyo-manga/vim-over' " Automatically highlight find and replace - Plug 'jiangmiao/auto-pairs' " Close brackets and other pairs automatically - Plug 'sukima/xmledit' " Automatically close tags when writing html - Plug 'w0rp/ale' " Automatically check language syntax for errors - Plug 'maksimr/vim-jsbeautify' " Make it easier to work with foreign code - Plug 'lervag/vimtex' " Make editing LaTeX a breeze - Plug 'dbeniamine/todo.txt-vim' " Easily manage any part of your todo.txt - Plug 'Kjwon15/vim-transparent' " Add transparency by default for all color schemes - Plug 'elixir-editors/vim-elixir' " Add syntax highlighting and autoindent for Elixir - - Plug 'tpope/vim-fugitive' " Add fugitive.vim, enabling us to use git in vim - Plug 'junegunn/fzf' " Add fuzzy finding to easily move between files - Plug 'junegunn/fzf.vim' " Add the vim functionality of fuzzy finding - - Plug 'rhysd/vim-crystal' " Add support for the crystal language - Plug 'scrooloose/nerdtree' " Add a file browser to vim - - Plug 'majutsushi/tagbar' " Add tagbar to show functions on the side - Plug 'lvht/tagbar-markdown' " Add support for markdown to tagbar - - Plug 'rust-lang/rust.vim' " Add rust support to vim - - Plug 'jamessan/vim-gnupg' " Easily use GPG encryption inside of vim - Plug 'reedes/vim-pencil' " Use vim as a tool for writing - Plug 'mileszs/ack.vim' " Testing ack.vim with ag - Plug 'tpope/vim-endwise' " Automatically add end - Plug 'junegunn/goyo.vim' " Distraction-free writing - Plug 'Yggdroot/indentLine' " Show indentation levels - - Plug 'Shougo/unite.vim' " Required by vimfiler - Plug 'Shougo/vimfiler.vim' " Yet another file explorer - - Plug 'mattn/emmet-vim' " Add emmet support - Plug 'sgur/vim-editorconfig' " Add editorconfig support -call plug#end() " Start the plugins - -" =================================== Configuration =================================== - -filetype plugin indent on " Attempt to determine the file type of extensionless files -syntax enable " Turn syntax highlighting on - -set nocompatible " Use vim defaults (i.e. ignore vi compatibility) -set backspace=indent,eol,start " Make the backspace key function as you would expect -set encoding=utf-8 " Always show files as utf-8 -set fileencoding=utf-8 " Ensure that we always save files as utf-8 - -set autoindent " Automatically indent new lines -set ignorecase " By default use case-insensitive search (combine with smartcase) -set smartcase " Make search case-sensitive when using capital letters -set showcmd " Always show the current keybinding being executed -set spell " Enable spell check by default - -set incsearch " Automatically move to text as you search for it -set wildmenu " Show a menu of the different options when you tab in command mode -set display+=lastline " Show as much of a long line as possible -set laststatus=0 " Disable the status line (removes filename and increases working space) - -set history=100 " Only keep the last 100 commands -set tabpagemax=50 " Set the maximum number of tabs to be opened in any window to 50 -set viminfo^=! " Use viminfo to store workspace and other data automatically -set sessionoptions-=options " When you explicitly save a workspace, save the entire environment - -set t_Co=256 " Tell vim that we want to use 256 colors -set scrolloff=1 " The minimal number of rows to show when scrolling up/down -set sidescrolloff=5 " The minimal number of columns to show when scrolling left/right - -set undofile " Keep track of undos even after you close a file -set undodir=~/.vim/undo " Save the undo history here (not that the directory must exist) -set undolevels=1000 " We can undo this many times -set undoreload=10000 " The maximum number of lines to keep in the undo file - -set tabstop=4 " Show a tab character as 4 spaces -set softtabstop=0 " Edit soft tabs as if they're regular spaces -set shiftwidth=4 " Make autoindent appear as 4 spaces - -set expandtab " When using , replace the tab character with 4 spaces -set smarttab " Always indent based on column number to align things easier +source ~/.vim/plugins.vim +source ~/.vim/config.vim +source ~/.vim/colors.vim +source ~/.vim/ctags.vim +source ~/.vim/keybindings.vim " =================================== Plugin-Specific =================================== -let base16colorspace=256 " Tell base16 to use 256 colors -" source ~/.vimrc_background " Load the same base16 theme used in the shell -source ~/Home/Contributing/base16-vim/colors/base16-atelier-cave-light.vim - let g:ale_lint_on_text_changed = 'never' " Do not lint while typing let g:ale_lint_on_insert_leave = 1 " Only lint after leaving insert mode let g:ackprg = 'ag --vimgrep' " Use ag instead of ack / grep @@ -160,11 +80,6 @@ nnoremap e (vimtex-cmd-toggle-star) inoremap ]] (vimtex-delim-close) -" =================================== Custom Keybindings =================================== - -" Change the global leader to the space bar -let mapleader = ' ' - " Use incsearch and tab / shift+tab to go through the results cno getcmdtype() =~ '[?/]' ? '' : feedkeys('', 'int')[1] cno getcmdtype() =~ '[?/]' ? '' : feedkeys('', 'int')[1] @@ -178,62 +93,6 @@ highlight OverLength ctermbg=red ctermfg=white guibg=#592929 " Automatically close the file viewer when it's the only thing left autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif -" Add elixir support to ctags -let g:tagbar_type_elixir = { - \ 'ctagstype' : 'elixir', - \ 'kinds' : [ - \ 'f:functions', - \ 'functions:functions', - \ 'c:callbacks', - \ 'd:delegates', - \ 'e:exceptions', - \ 'i:implementations', - \ 'a:macros', - \ 'o:operators', - \ 'm:modules', - \ 'p:protocols', - \ 'r:records', - \ 't:tests' - \ ] -\ } - -" Add rust support to ctags -let g:tagbar_type_rust = { - \ 'ctagstype' : 'rust', - \ 'kinds' : [ - \'T:types,type definitions', - \'f:functions,function definitions', - \'g:enum,enumeration names', - \'s:structure names', - \'m:modules,module names', - \'c:consts,static constants', - \'t:traits', - \'i:impls,trait implementations', - \] -\} - -" Add crystal support to ctags -let g:tagbar_type_crystal = { - \'ctagstype': 'crystal', - \'ctagsbin': 'crystalctags', - \'kinds': [ - \'c:classes', - \'m:modules', - \'d:defs', - \'x:macros', - \'l:libs', - \'s:sruct or unions', - \'f:fun' - \], - \'sro': '.', - \'kind2scope': { - \'c': 'namespace', - \'m': 'namespace', - \'l': 'namespace', - \'s': 'namespace' - \}, -\} - " Use w!! to force write a file as sudo " cmap w!! w !sudo tee > /dev/null % @@ -275,64 +134,3 @@ match Function /@requires/ " Use syntax highlighting for .ecr files autocmd BufNewFile,BufRead *.ecr set syntax=html - -" Easily switch between buffers -nnoremap gn :bn -nnoremap gp :bp -nnoremap gd :bd -" ================== Top row -"nnoremap -nnoremap q :Files -nnoremap w :Commits -nnoremap e :set nu! -nnoremap r :call matchadd('OverLength', '\%101v', 100) -nnoremap t :OverCommandLine%s/ -"nnoremap y -nnoremap u w -nnoremap i -nnoremap o -nnoremap p -" Easily show all git diffs -nnoremap [ :GFiles? -" Easily show all git files -nnoremap ] :GFiles -" Easily go through all the commits for a specific file -nnoremap \ :BCommits -" ================== Middle row -nnoremap a :NERDTreeToggle -"nnoremap s -nnoremap d :TagbarToggle -nnoremap f :VimFiler -nnoremap g :set hlsearch! -nnoremap h :Buffers -" Easily jump between lines in all open files -nnoremap j :Lines -" Easily jump between lines in the same file -nnoremap k :BLines -" Easily search for any line in all files in the project -nnoremap l :Ag -" Easily open new files in horizontal and vertical splits -nnoremap ; :split w :Files -nnoremap ' :vsplit w :Files -" ================== Bottom row -" Note that I personally don't use + z/x/c/n/m/,/. -nnoremap v :Ack! "\b\b" -"nnoremap b -nnoremap n o -nnoremap m O - -" Bind the right beautify function based on what file is open -autocmd FileType javascript map b :call JsBeautify() -autocmd FileType json map b :call JsonBeautify() -autocmd FileType jsx map b :call JsxBeautify() -autocmd FileType html map b :call HtmlBeautify() -autocmd FileType css map b :call CSSBeautify() - -" Easily enter 'zen mode' with Goyo and Pencil -" We have to explicitly set vertsplit again since Goyo resets it for some reason -nnoremap 2 :PencilSoft:Goyo:hi vertsplit ctermfg=8 ctermbg=none -nnoremap 3 :mksession! ~/.vim_session -nnoremap 4 :source ~/.vim_session -nnoremap 8 :15winc - -nnoremap 9 :15winc + -nnoremap 0 :winc =