""" General settings set autoindent set backspace=indent,eol,start set complete-=i " Set the matches for insert mode completion set encoding=utf-8 " Set encoding set expandtab " Use spaces instead of tabs set formatoptions+=j " Delete comment character when joining commented lines set hlsearch " Highlight all search results set laststatus=2 " Always status line set ignorecase " Ignore cases when searching set incsearch " Incremental search set linebreak " Break lines at word (requires Wrap lines) set nowrap " Don't add an actual linebreak when wrapping set ruler " Show line & col number of cursor position set shiftwidth=4 " Number of auto-indent spaces set showmatch " Highlight matching brace set smartcase " Better searching btw cases set smartindent " Autoindent when starting a new line set smarttab " Tab insertion & deletion set tabstop=4 " One tab = 4 spaces set textwidth=80 " Line wrap (number of cols) set visualbell " Use visual bell (no beeping) set wildmenu " Helpful completion menu " start with crosshairs visible set cursorline! cursorcolumn! " Strings to use in 'list' mode and for the :list command set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+ """ Enable syntax "if has('syntax') && !exists('g:syntax_on') " syntax enable "endif """ Make , the leader key let mapleader = "," " easy escape imap fd " send to ix.io noremap i :w !ix " edit files and buffers, relative to local nmap ,e :edit nmap ;e :edit =expand("%:h") . "/" nmap ,o :buffer nmap ;o :buffer =expand("%:h") . "/" " tags nmap ,j :tag " list buffers nmap ,l :ls " kill buffer nmap ,k :bdelete " insert current date nmap ,d :r !date +\%Y.\%m.\%d nmap ,D :r !date +\%Y.\%m.\%d..\%H.\%M.\%S " grep (ripgrep) nmap ,g :Rg " format haskell code nmap ,f :!ormolu -m inplace % " clear out trailing whitespace and lines ending in whitespace nmap ,w :%s/[\t ]\+$//e " Use to clear the highlighting of :set hlsearch. if maparg('', 'n') ==# '' nnoremap :nohlsearch=has('diff')?'diffupdate':'' endif " trailing spaces are always bad syntax match Warning display "\s\+$" " mixed tabs and spaces syntax match Warning display " \+\t" syntax match Warning display "\t\+ " """ Easily find cursor with crosshair (,c) ":hi CursorLine cterm=NONE term=reverse ctermbg=7 guibg=Grey90 ":hi CursorColumn cterm=NONE term=reverse ctermbg=7 guibg=Grey90 :nnoremap c :set cursorline! cursorcolumn! """ File browser let g:netrw_banner=0 " Disable file browser banner let g:netrw_liststyle=3 " Tree view """ CTAGS shortcuts " open definition in a new tab: map :tab split:exec("tag ".expand("")) " open definition in a vertical split: map :vsp :exec("tag ".expand("")) """ Colors! set termguicolors let &t_8f = "\[38;2;%lu;%lu;%lum" let &t_8b = "\[48;2;%lu;%lu;%lum" """ Show highlighting groups for current word nmap :call SynStack() function! SynStack() if !exists("*synstack") return endif echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') endfunc set background=dark colorscheme photon " disable my color scheme, it doesn't work with vimdiff "let g:colors_name = 'bs_monochrome' " "let s:white = ['White', 15] "let s:black = ['#0e1111', 16] "let s:dblack = ['#111111', 1] "let s:bgray = ['#181818', 233] "let s:lgray = ['LightGray', 255] "let s:cgray = ['#737373', 243] "let s:dgray = ['DarkGray', 248] "let s:sblue = ['LightBlue', 67] "let s:yellow = ['LightYellow', 226] "let s:red = ['LightRed', 160] "let s:green = ['LightGreen', 28] "let s:purple = ['LightMagenta', 13] "" "let s:default_fg = s:lgray "let s:default_bg = s:black " "let s:italic = 'italic' "let s:bold = 'bold' "let s:underline = 'underline' "let s:none = 'NONE' " "let s:default_lst = [] "let s:default_str = '' " "if !exists("g:monochrome_italic_comments") " let g:monochrome_italic_comments = 0 "endif "let s:comment_attr = g:monochrome_italic_comments ? s:italic : s:none "" "" A function for setting colors, if I want it... "function! s:hi(...) " let group = a:1 " let fg = get(a:, 2, s:default_fg) " let bg = get(a:, 3, s:default_bg) " let attr = get(a:, 4, s:default_str) " " let cmd = ['hi', group] " " if fg != s:default_lst " call add(cmd, 'guifg='.fg[0]) " call add(cmd, 'ctermfg='.fg[1]) " endif " " if bg != s:default_lst && bg != s:default_bg " call add(cmd, 'guibg='.bg[0]) " call add(cmd, 'ctermbg='.bg[1]) " endif " " if attr != s:default_str " call add(cmd, 'gui='.attr) " call add(cmd, 'cterm='.attr) " endif " " exec join(cmd, ' ') "endfunction " "call s:hi('Normal') "highlight clear Cursor "highlight clear CursorLine " clear the underline nonsense "call s:hi('Cursor', s:black, s:sblue) "call s:hi('lCursor', s:black, s:sblue) "call s:hi('CursorLine', s:black, s:sblue, s:none) "call s:hi('CursorLineNr', s:white, s:sblue, s:bold) "call s:hi('CursorColumn', s:black, s:sblue, s:none) "call s:hi('ColorColumn', s:lgray, s:dblack, s:none) "call s:hi('Search', s:black, s:purple) "call s:hi('Visual', s:black, s:green) "call s:hi('ErrorMsg', s:white, s:red) "call s:hi('StatusLine', s:black, s:purple) "call s:hi('StatusLineNC', s:black, s:purple) "call s:hi('VertSplit', s:black, s:purple) "" """ Tildes at the bottom of a buffer, etc. "call s:hi('NonText', s:dgray) " "" Folding. "call s:hi('FoldColumn', s:dgray) "call s:hi('Folded') " "" Line numbers gutter. "call s:hi('LineNr', s:dgray) " "" Small arrow used for tabs. "call s:hi('SpecialKey', s:sblue, s:default_bg, s:bold) " "" File browsers. "call s:hi('Directory', s:white, s:default_bg, s:bold) " "" Help. "call s:hi('helpSpecial') "call s:hi('helpHyperTextJump', s:sblue, s:default_bg, s:underline) "call s:hi('helpNote') " "" Popup menu. "call s:hi('Pmenu', s:white, s:sblue) "call s:hi('PmenuSel', s:sblue, s:white) " "" Notes. "call s:hi('Todo', s:black, s:yellow, s:bold) " "" Signs. "call s:hi('SignColumn') " "" --- Languages --------------------------------------------------------------- "call s:hi('Statement', s:white, s:default_bg, s:bold) "call s:hi('PreProc', s:white, s:default_bg, s:bold) "call s:hi('String', s:sblue) "call s:hi('Comment', s:cgray, s:default_bg, s:comment_attr) "call s:hi('Constant') "call s:hi('Type', s:white, s:default_bg, s:bold) "call s:hi('Function', s:white) "call s:hi('Identifier') "call s:hi('Special') "call s:hi('MatchParen', s:black, s:lgray) "call s:hi('vimOption') "call s:hi('vimGroup') "call s:hi('vimHiClear') "call s:hi('vimHiGroup') "call s:hi('vimHiAttrib') "call s:hi('vimHiGui') "call s:hi('vimHiGuiFgBg') "call s:hi('vimHiCTerm') "call s:hi('vimHiCTermFgBg') "call s:hi('vimSynType') "hi link vimCommentTitle Comment "call s:hi('pythonEscape', s:sblue) "call s:hi('javaScriptFunction', s:white, s:default_bg, s:bold) "call s:hi('perlSharpBang', s:cgray) "call s:hi('perlStringStartEnd', s:sblue) "call s:hi('perlStringEscape', s:sblue) "call s:hi('perlMatchStartEnd', s:sblue) "call s:hi('elixirAlias', s:default_fg, s:default_bg, s:none) "call s:hi('elixirDelimiter', s:sblue) "call s:hi('elixirSelf', s:default_fg, s:default_bg, s:none) "" For ||, ->, etc. "call s:hi('elixirOperator') "" Module attributes like @doc or @type. "hi link elixirVariable Statement "" While rendered as comments in other languages, docstrings are strings, "" experimental. "hi link elixirDocString String "hi link elixirDocTest String "hi link elixirStringDelimiter String "call s:hi('rubyConstant') "call s:hi('rubySharpBang', s:cgray) "call s:hi('rubyStringDelimiter', s:sblue) "call s:hi('rubyStringEscape', s:sblue) "call s:hi('rubyRegexpEscape', s:sblue) "call s:hi('rubyRegexpAnchor', s:sblue) "call s:hi('rubyRegexpSpecial', s:sblue) " "" --- Diffs -------------------------------------------------------------------- "call s:hi('diffFile', s:cgray) "call s:hi('diffNewFile', s:cgray) "call s:hi('diffIndexLine', s:cgray) "call s:hi('diffLine', s:cgray) "call s:hi('diffSubname', s:cgray) "call s:hi('diffAdded', s:white, s:green) "call s:hi('diffRemoved', s:white, s:red) " load ~/.vimrc.local last for local overrides if filereadable('~/.vimrc.local') source ~/.vimrc.local endif