Skip to content

Instantly share code, notes, and snippets.

@blackrobot
Last active August 26, 2019 20:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save blackrobot/bd59d4ab311541b91e7a72db0b4de5c6 to your computer and use it in GitHub Desktop.
Save blackrobot/bd59d4ab311541b91e7a72db0b4de5c6 to your computer and use it in GitHub Desktop.
A minimal vimrc for use on remote servers

Minimal .vimrc

To install, download the .vimrc to the $HOME directory, and create the subdirs in ~/.vim/.

mkdir -p ~/.vim/_backup/
mkdir -p ~/.vim/_temp/
mkdir -p ~/.vim/_undo/
[[ -e ~/.vimrc ]] && cp ~/.vimrc ~/.vimrc.backup
curl -sSLo ~/.vimrc $LINK_TO_MINIMAL_VIMRC
syntax enable
colorscheme slate
set ai
set autoread
set background=dark
set backspace=eol,start,indent
set backupdir^=~/.vim/_backup//
set directory^=~/.vim/_temp//
set encoding=utf8
set expandtab
set ffs=unix,dos,mac
set history=500
set hlsearch
set ignorecase
set incsearch
set laststatus=2
set lazyredraw
set magic
set mat=2
set noerrorbells
set novisualbell
set nowrap
set number
set ruler
set shiftwidth=2
set showmatch
set si
set smartcase
set smarttab
set so=7
set statusline=\ %n:\ %F\ %m%r%y%=[%{strlen(&fenc)?&fenc:'none'}]\ [%{&ff}]\ %c/%l\ (%L)\ %P
set t_vb=
set tabstop=2
set softtabstop=2
set tm=500
set undodir^=~/.vim/_undo//
" set undofile
set whichwrap+=<,>,h,l
set wildignore=*.o,*~,*.pyc,.git\*
set wildmenu
set wildmode=longest,list,full
nnoremap <silent> <C-l> :nohl<CR><C-l>
cnoremap <C-A> <Home>
cnoremap <C-E> <End>
cnoremap <C-K> <C-U>
filetype plugin on
filetype indent on
let mapleader = ","
let g:mapleader = ","
" Python
au FileType python setlocal sts=4 sw=4 ts=4 tw=79 colorcolumn=80
au BufRead,BufNewFile *.py match BadWhitespace /^\t\+/
au BufRead,BufNewFile *.py match BadWhitespace /\s\+$/
" Save as root
cmap w!! %!sudo tee > /dev/null %
let g:loaded_numbertoggle = 1
let g:insertmode = 0
let g:focus = 1
let g:relativemode = 1
" Enables relative numbers.
function! EnableRelativeNumbers()
set number
set relativenumber
endfunc
" Disables relative numbers.
function! DisableRelativeNumbers()
set number
set norelativenumber
endfunc
" NumberToggle toggles between relative and absolute line numbers
function! NumberToggle()
if(&relativenumber == 1)
call DisableRelativeNumbers()
let g:relativemode = 0
else
call EnableRelativeNumbers()
let g:relativemode = 1
endif
endfunc
function! UpdateMode()
if(&number == 0 && &relativenumber == 0)
return
end
if(g:focus == 0)
call DisableRelativeNumbers()
elseif(g:insertmode == 0 && g:relativemode == 1)
call EnableRelativeNumbers()
else
call DisableRelativeNumbers()
end
if !exists("&numberwidth") || &numberwidth <= 4
" Avoid changing actual width of the number column with each jump between
" number and relativenumber:
let &numberwidth = max([4, 1+len(line('$'))])
else
" Explanation of the calculation:
" - Add 1 to the calculated maximal width to make room for the space
" - Assume 4 as the minimum desired width if &numberwidth is not set or is
" smaller than 4
let &numberwidth = max([&numberwidth, 1+len(line('$'))])
endif
endfunc
function! FocusGained()
let g:focus = 1
call UpdateMode()
endfunc
function! FocusLost()
let g:focus = 0
call UpdateMode()
endfunc
function! InsertLeave()
let g:insertmode = 0
call UpdateMode()
endfunc
function! InsertEnter()
let g:insertmode = 1
call UpdateMode()
endfunc
" Automatically set relative line numbers when opening a new document
autocmd BufNewFile * :call UpdateMode()
autocmd BufReadPost * :call UpdateMode()
autocmd FilterReadPost * :call UpdateMode()
autocmd FileReadPost * :call UpdateMode()
" Automatically switch to absolute numbers when focus is lost and switch back
" when the focus is regained.
autocmd FocusLost * :call FocusLost()
autocmd FocusGained * :call FocusGained()
autocmd WinLeave * :call FocusLost()
autocmd WinEnter * :call FocusGained()
" Switch to absolute line numbers when the window loses focus and switch back
" to relative line numbers when the focus is regained.
autocmd WinLeave * :call FocusLost()
autocmd WinEnter * :call FocusGained()
" Switch to absolute line numbers when entering insert mode and switch back to
" relative line numbers when switching back to normal mode.
autocmd InsertEnter * :call InsertEnter()
autocmd InsertLeave * :call InsertLeave()
" ensures default behavior / backward compatibility
if ! exists ( 'g:UseNumberToggleTrigger' )
let g:UseNumberToggleTrigger = 1
endif
if exists('g:NumberToggleTrigger')
exec "nnoremap <silent> " . g:NumberToggleTrigger . " :call NumberToggle()<cr>"
elseif g:UseNumberToggleTrigger
nnoremap <silent> <C-n> :call NumberToggle()<cr>
endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment