Sane vim config & bitquabit
Jesse Olson j3s@c3f.net
Mon, 03 Aug 2020 22:11:08 +0000
2 files changed,
356 insertions(+),
153 deletions(-)
M
.config/rss-feeds.txt
→
.config/rss-feeds.txt
@@ -11,3 +11,4 @@ https://matrix.org/blog/feed
https://puri.sm/feed https://blog.tildes.net/all.atom.xml https://100r.co/links/rss.xml +https://www.bitquabit.com/index.xml
M
.vimrc
→
.vimrc
@@ -1,181 +1,383 @@
-set nocompatible -filetype off +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Maintainer: +" Amir Salihefendic — @amix3k +" +" Awesome_version: +" Get this config, nice color schemes and lots of plugins! +" +" Install the awesome version from: +" +" https://github.com/amix/vimrc +" +" Sections: +" -> General +" -> VIM user interface +" -> Colors and Fonts +" -> Files and backups +" -> Text, tab and indent related +" -> Visual mode related +" -> Moving around, tabs and buffers +" -> Status line +" -> Editing mappings +" -> vimgrep searching and cope displaying +" -> Spell checking +" -> Misc +" -> Helper functions +" +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -set rtp+=~/.vim/bundle/Vundle.vim -call vundle#begin() -" Bundles -" Actual plugins -Plugin 'VundleVim/Vundle.vim' -Plugin 'tpope/vim-fugitive' -Plugin 'kien/ctrlp.vim' -Plugin 'tpope/vim-surround' -Plugin 'tpope/vim-repeat' -Plugin 'editorconfig/editorconfig-vim' -Plugin 'gerw/vim-HiLinkTrace' -" Meta plugins -Plugin 'vim-scripts/ingo-library' -Plugin 'vim-scripts/SyntaxRange' -" Syntax highlighting -Plugin 'plasticboy/vim-markdown' -Plugin 'cespare/vim-toml' -Plugin 'rust-lang/rust.vim' -Plugin 'mxw/vim-jsx' -Plugin 'pangloss/vim-javascript' -Plugin 'kchmck/vim-coffee-script' -Plugin 'google/vim-jsonnet' -Plugin 'sirtaj/vim-openscad' -Plugin 'leafgarland/typescript-vim' -Plugin 'beyondmarc/glsl.vim' -Plugin 'vim-scripts/scons.vim' -Plugin 'calviken/vim-gdscript3' -Plugin 'wannesm/wmgraphviz.vim' -Plugin 'sotte/presenting.vim' -Plugin 'ziglang/zig.vim' -Plugin 'gpanders/vim-scdoc' -" /Bundles +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => General +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Sets how many lines of history VIM has to remember +set history=500 + +" Enable filetype plugins +filetype plugin on +filetype indent on + +" Set to auto read when a file is changed from the outside +set autoread +au FocusGained,BufEnter * checktime + +" With a map leader it's possible to do extra key combinations +" like <leader>w saves the current file +let mapleader = "," + +" Fast saving +nmap <leader>w :w!<cr> -call vundle#end() +" :W sudo saves the file +" (useful for handling the permission-denied error) +command! W execute 'w !sudo tee % > /dev/null' <bar> edit! -filetype plugin indent on -set laststatus=2 -set t_Co=256 +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => VIM user interface +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Set 7 lines to the cursor - when moving vertically using j/k +set so=7 -let g:vim_markdown_folding_disabled=1 -let g:vim_markdown_frontmatter=1 -let g:jsx_ext_required = 0 +" Avoid garbled characters in Chinese language windows OS +let $LANG='en' +set langmenu=en +source $VIMRUNTIME/delmenu.vim +source $VIMRUNTIME/menu.vim -set encoding=utf-8 -set tabstop=4 -set shiftwidth=4 -set autoindent -set magic " unbreak vim's regex implementation +" Turn on the Wild menu +set wildmenu -set number -set scrolloff=3 -set sidescroll=3 +" Ignore compiled files +set wildignore=*.o,*~,*.pyc +if has("win16") || has("win32") + set wildignore+=.git\*,.hg\*,.svn\* +else + set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store +endif +"Always show current position set ruler -set cc=80 -set nowrap + +" Height of the command bar +set cmdheight=1 + +" A buffer becomes hidden when it is abandoned +set hid +" Configure backspace so it acts as it should act +set backspace=eol,start,indent +set whichwrap+=<,>,h,l + +" Ignore case when searching set ignorecase -set smartcase -set splitbelow -set hidden -set notimeout +" When searching try to be smart about cases +set smartcase -" Search as you type, highlight results -set incsearch -set showmatch +" Highlight search results set hlsearch -" eff mouz -set mouse=a +" Makes search act like search in modern browsers +set incsearch -" Don't litter swp files everywhere -set backupdir=~/.cache -set directory=~/.cache +" Don't redraw while executing macros (good performance config) +set lazyredraw -set nofoldenable -set lazyredraw +" For regular expressions turn magic on +set magic -set tags=./tags; +" Show matching brackets when text indicator is over them +set showmatch +" How many tenths of a second to blink when matching brackets +set mat=2 -set printheader=\ +" No annoying sound on errors +set noerrorbells +set novisualbell +set t_vb= +set tm=500 -syntax on -let mapleader = "\<space>" -nnoremap \\ :noh<cr> " Clear higlighting -nnoremap <silent> <F5> :let _s=@/<Bar>:%s/\s\+$//e<Bar>:let @/=_s<Bar>:nohl<CR> " Trim trailing spaces -nnoremap Y y$ -nnoremap cc :center<cr> -inoremap <C-c> <ESC> -" Ex mode is fucking dumb -nnoremap Q <Nop> +" Properly disable sound on errors on MacVim +if has("gui_macvim") + autocmd GUIEnter * set vb t_vb= +endif -command Jp e ++enc=euc-jp -" Preferences for various file formats -autocmd FileType c setlocal noet ts=4 sw=4 tw=80 -autocmd FileType h setlocal noet ts=4 sw=4 tw=80 -autocmd FileType cpp setlocal noet ts=4 sw=4 tw=80 -autocmd FileType s setlocal noet ts=4 sw=4 -autocmd FileType go setlocal noet ts=4 sw=4 -autocmd FileType hy setlocal filetype=lisp -autocmd FileType sh setlocal noet ts=4 sw=4 -autocmd BufRead,BufNewFile *.js setlocal et ts=2 sw=2 -autocmd FileType html setlocal et ts=2 sw=2 -autocmd FileType htmldjango setlocal et ts=2 sw=2 -autocmd FileType ruby setlocal et ts=2 sw=2 -autocmd FileType scss setlocal et ts=2 sw=2 -autocmd FileType yaml setlocal et ts=2 sw=2 -autocmd FileType markdown setlocal tw=80 et ts=2 sw=2 -autocmd FileType text setlocal tw=80 -autocmd FileType meson setlocal noet ts=2 sw=2 -autocmd FileType bzl setlocal et ts=2 sw=2 -autocmd FileType typescript setlocal et ts=2 sw=2 -autocmd FileType python setlocal et ts=4 sw=4 -autocmd BufNewFile,BufRead *.ms set syntax=python ts=4 sw=4 noet -autocmd FileType tex hi Error ctermbg=NONE -autocmd FileType mail setlocal noautoindent -augroup filetypedetect - autocmd BufRead,BufNewFile *mutt-* setfiletype mail -augroup filetypedetect - autocmd BufRead,BufNewFile *qutebrowser-editor-* set ts=4 sw=4 et -autocmd BufNewFile,BufRead * if expand('%:t') == 'APKBUILD' | set ft=sh | endif -autocmd BufNewFile,BufRead * if expand('%:t') == 'PKGBUILD' | set ft=sh | endif +" Add a bit extra margin to the left +set foldcolumn=1 -set guioptions-=m -set guioptions-=T -set guioptions-=r -set guioptions-=e -nmap <leader>l :set list!<CR> -set listchars=tab:▸\ ,eol:¬,space:. +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Colors and Fonts +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Enable syntax highlighting +syntax enable -syntax enable -colorscheme ron -highlight Search ctermbg=12 -highlight NonText ctermfg=darkgrey -highlight SpecialKey ctermfg=darkgrey -highlight clear SignColumn -highlight Comment cterm=bold ctermfg=none -highlight StatusLine cterm=none ctermbg=none ctermfg=darkgrey -highlight StatusLineNC cterm=none ctermbg=none ctermfg=darkgrey -highlight Title cterm=none ctermfg=darkgrey -highlight TabLineFill cterm=none -highlight TabLine cterm=none ctermfg=darkgrey ctermbg=none -highlight ColorColumn ctermbg=darkgrey guibg=lightgrey -highlight jsParensError ctermbg=NONE -highlight Todo ctermbg=NONE ctermfg=red cterm=bold -highlight PreProc ctermfg=grey -highlight String ctermfg=darkblue cterm=italic -highlight Type ctermfg=darkblue -highlight lineNr ctermfg=grey cterm=italic -highlight cIncluded ctermfg=NONE cterm=bold -highlight pythonInclude ctermfg=blue -highlight pythonConditional ctermfg=darkcyan -highlight pythonBuiltin ctermfg=darkcyan -highlight Pmenu ctermbg=white ctermfg=black -highlight PmenuSel ctermbg=darkcyan ctermfg=black +" Enable 256 colors palette in Gnome Terminal +if $COLORTERM == 'gnome-terminal' + set t_Co=256 +endif -" Transparent editing of gpg encrypted files. -" By Wouter Hanegraaff -augroup encrypted - au! - autocmd BufReadPre,FileReadPre *.gpg set viminfo= - autocmd BufReadPre,FileReadPre *.gpg set noswapfile noundofile nobackup - autocmd BufReadPre,FileReadPre *.gpg set bin - autocmd BufReadPre,FileReadPre *.gpg let ch_save = &ch|set ch=2 - autocmd BufReadPost,FileReadPost *.gpg '[,']!gpg --decrypt 2> /dev/null - autocmd BufReadPost,FileReadPost *.gpg set nobin - autocmd BufReadPost,FileReadPost *.gpg let &ch = ch_save|unlet ch_save - autocmd BufReadPost,FileReadPost *.gpg execute ":doautocmd BufReadPost " . expand("%:r") - autocmd BufWritePre,FileWritePre *.gpg '[,']!gpg --default-recipient-self -ae 2>/dev/null - autocmd BufWritePost,FileWritePost *.gpg u -augroup END +try + colorscheme desert +catch +endtry + +set background=dark + +" Set extra options when running in GUI mode +if has("gui_running") + set guioptions-=T + set guioptions-=e + set t_Co=256 + set guitablabel=%M\ %t +endif + +" Set utf8 as standard encoding and en_US as the standard language +set encoding=utf8 + +" Use Unix as the standard file type +set ffs=unix,dos,mac + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Files, backups and undo +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Turn backup off, since most stuff is in SVN, git etc. anyway... +set nobackup +set nowb +set noswapfile + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Text, tab and indent related +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Use spaces instead of tabs +set expandtab + +" Be smart when using tabs ;) +set smarttab + +" 1 tab == 4 spaces +set shiftwidth=4 +set tabstop=4 + +" Linebreak on 500 characters +set lbr +set tw=500 + +set ai "Auto indent +set si "Smart indent +set wrap "Wrap lines + + +"""""""""""""""""""""""""""""" +" => Visual mode related +"""""""""""""""""""""""""""""" +" Visual mode pressing * or # searches for the current selection +" Super useful! From an idea by Michael Naumann +vnoremap <silent> * :<C-u>call VisualSelection('', '')<CR>/<C-R>=@/<CR><CR> +vnoremap <silent> # :<C-u>call VisualSelection('', '')<CR>?<C-R>=@/<CR><CR> + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Moving around, tabs, windows and buffers +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search) +map <space> / +map <C-space> ? + +" Disable highlight when <leader><cr> is pressed +map <silent> <leader><cr> :noh<cr> + +" Smart way to move between windows +map <C-j> <C-W>j +map <C-k> <C-W>k +map <C-h> <C-W>h +map <C-l> <C-W>l + +" Close the current buffer +map <leader>bd :Bclose<cr>:tabclose<cr>gT + +" Close all the buffers +map <leader>ba :bufdo bd<cr> + +map <leader>l :bnext<cr> +map <leader>h :bprevious<cr> + +" Useful mappings for managing tabs +map <leader>tn :tabnew<cr> +map <leader>to :tabonly<cr> +map <leader>tc :tabclose<cr> +map <leader>tm :tabmove +map <leader>t<leader> :tabnext + +" Let 'tl' toggle between this and the last accessed tab +let g:lasttab = 1 +nmap <Leader>tl :exe "tabn ".g:lasttab<CR> +au TabLeave * let g:lasttab = tabpagenr() + + +" Opens a new tab with the current buffer's path +" Super useful when editing files in the same directory +map <leader>te :tabedit <C-r>=expand("%:p:h")<cr>/ + +" Switch CWD to the directory of the open buffer +map <leader>cd :cd %:p:h<cr>:pwd<cr> + +" Specify the behavior when switching between buffers +try + set switchbuf=useopen,usetab,newtab + set stal=2 +catch +endtry -let g:presenting_top_margin = 2 +" Return to last edit position when opening files (You want this!) +au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif + + +"""""""""""""""""""""""""""""" +" => Status line +"""""""""""""""""""""""""""""" +" Always show the status line +set laststatus=2 + +" Format the status line +set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Editing mappings +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Remap VIM 0 to first non-blank character +map 0 ^ + +" Move a line of text using ALT+[jk] or Command+[jk] on mac +nmap <M-j> mz:m+<cr>`z +nmap <M-k> mz:m-2<cr>`z +vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z +vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z + +if has("mac") || has("macunix") + nmap <D-j> <M-j> + nmap <D-k> <M-k> + vmap <D-j> <M-j> + vmap <D-k> <M-k> +endif + +" Delete trailing white space on save, useful for some filetypes ;) +fun! CleanExtraSpaces() + let save_cursor = getpos(".") + let old_query = getreg('/') + silent! %s/\s\+$//e + call setpos('.', save_cursor) + call setreg('/', old_query) +endfun + +if has("autocmd") + autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces() +endif + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Spell checking +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Pressing ,ss will toggle and untoggle spell checking +map <leader>ss :setlocal spell!<cr> + +" Shortcuts using <leader> +map <leader>sn ]s +map <leader>sp [s +map <leader>sa zg +map <leader>s? z= + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Misc +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Remove the Windows ^M - when the encodings gets messed up +noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm + +" Quickly open a buffer for scribble +map <leader>q :e ~/buffer<cr> + +" Quickly open a markdown buffer for scribble +map <leader>x :e ~/buffer.md<cr> + +" Toggle paste mode on and off +map <leader>pp :setlocal paste!<cr> + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Helper functions +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Returns true if paste mode is enabled +function! HasPaste() + if &paste + return 'PASTE MODE ' + endif + return '' +endfunction + +" Don't close window, when deleting a buffer +command! Bclose call <SID>BufcloseCloseIt() +function! <SID>BufcloseCloseIt() + let l:currentBufNum = bufnr("%") + let l:alternateBufNum = bufnr("#") + + if buflisted(l:alternateBufNum) + buffer # + else + bnext + endif + + if bufnr("%") == l:currentBufNum + new + endif + + if buflisted(l:currentBufNum) + execute("bdelete! ".l:currentBufNum) + endif +endfunction + +function! CmdLine(str) + call feedkeys(":" . a:str) +endfunction + +function! VisualSelection(direction, extra_filter) range + let l:saved_reg = @" + execute "normal! vgvy" + + let l:pattern = escape(@", "\\/.*'$^~[]") + let l:pattern = substitute(l:pattern, "\n$", "", "") + + if a:direction == 'gv' + call CmdLine("Ack '" . l:pattern . "' " ) + elseif a:direction == 'replace' + call CmdLine("%s" . '/'. l:pattern . '/') + endif + + let @/ = l:pattern + let @" = l:saved_reg +endfunction