Skip to content

Instantly share code, notes, and snippets.

@Tracnac
Created October 14, 2025 14:20
Show Gist options
  • Select an option

  • Save Tracnac/d2855fe835b49dc8cf1f9ffd0843292b to your computer and use it in GitHub Desktop.

Select an option

Save Tracnac/d2855fe835b49dc8cf1f9ffd0843292b to your computer and use it in GitHub Desktop.
Vim minimal
" Minimal Vim
if !exists('g:loaded_clean_vimrc')
let g:loaded_clean_vimrc = 1
set all&
set nocompatible
endif
" Create directories for persistent files (undo/backup/swap)
if has('win32')
let s:vim_dir = expand('$APPDATA') . '\\Vim'
call mkdir(s:vim_dir . '\\undo', 'p')
call mkdir(s:vim_dir . '\\backup', 'p')
call mkdir(s:vim_dir . '\\swap', 'p')
else
let s:vim_dir = expand('$HOME') . '/.vim'
call mkdir(s:vim_dir . '/undo', 'p')
call mkdir(s:vim_dir . '/backup', 'p')
call mkdir(s:vim_dir . '/swap', 'p')
endif
" Persistent states
set undofile
set backup
set writebackup
set swapfile
set backupcopy=yes
if has('win32')
let &undodir = s:vim_dir . '\\undo'
let &backupdir = s:vim_dir . '\\backup'
let &directory = s:vim_dir . '\\swap'
else
let &undodir = s:vim_dir . '/undo'
let &backupdir = s:vim_dir . '/backup'
let &directory = s:vim_dir . '/swap'
endif
" Leader key
let mapleader = " "
" ALE options
let g:ale_completion_enabled = 1
let g:ale_lint_on_text_changed='never'
let g:ale_lint_on_insert_leave = 0
let g:ale_lint_on_save = 0
let g:ale_echo_cursor = 0
let g:ale_hover_cursor=0
nnoremap <leader>l :ALEToggle<CR>
nnoremap <leader>L :ALELintStop<CR>
" CTRLP options
if executable('rg')
let g:ctrlp_user_command = 'rg --files --hidden --glob "" %s'
elseif executable('fd')
let g:ctrlp_user_command = 'fd --type f --hidden --exclude .git --strip-cwd-prefix %s'
elseif executable('ag')
let g:ctrlp_user_command = 'ag -l --hidden --ignore .git %s'
endif
let g:ctrlp_custom_ignore = {
\ 'dir': '\v[\/]\.(git|hg|svn|node_modules|venv)$',
\ 'file': '\v\.(exe|so|dll|class|o)$',
\ }
let g:ctrlp_use_caching = 1
let g:ctrlp_map = '<C-p>'
let g:ctrlp_cmd = 'CtrlP'
let g:ctrlp_match_window = 'bottom,order:ttb,min:1,max:15,results:100'
" Netrw
let g:netrw_banner = 0 " no top banner
let g:netrw_liststyle = 3 " tree view
let g:netrw_browse_split = 2
" let g:netrw_altv = 1
let g:netrw_winsize = 16
" Bootstrap (run once in a shell):
" curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
call plug#begin('~/.vim/plugged')
Plug 'dense-analysis/ale'
Plug 'ctrlpvim/ctrlp.vim'
Plug 'tpope/vim-commentary'
call plug#end()
" Basic behavior
set encoding=utf-8
set termguicolors
filetype plugin indent on
syntax on
set lazyredraw
set nrformats-=octal
" Editing experience
set hidden
set backspace=indent,eol,start
set nowrap
" Indentation (sane defaults)
set expandtab
set shiftwidth=2
set softtabstop=2
set tabstop=2
set smarttab
set autoindent
set smartindent
" Searching
set incsearch
set hlsearch
set smartcase
" Display
set number
if exists('+relativenumber')
set relativenumber
endif
" set cursorline
set showcmd
set showmatch
set laststatus=2
set ruler
set showtabline=0
set formatoptions+=j
hi StatusLineMode guifg=#282828 guibg=#fabd2f gui=bold ctermfg=Black ctermbg=Yellow
set statusline=%#StatusLineMode#%{StatusMode()}%*\ %F\ %y\ %m%r%h%w\ %=\ [%l:%c]\ [%p%%]\ %{StatusTabs()}\ %{StatusBuffers()}\ %{exists('*FugitiveHead')?FugitiveHead():''}\ %{StatusALE()}
set sessionoptions-=options
set viewoptions-=options
set sidescroll=1
set sidescrolloff=2
" Performance
set updatetime=300
set timeoutlen=500
set ttimeout
set ttimeoutlen=100
set complete-=i
" Disable mouse by default (change to 'a' to enable)
set mouse=
" Clipboard: leave empty (do not override system clipboard)
set clipboard=
" Wildmenu and completion conveniences
set wildmenu
set wildmode=longest,full
set wildignore+=*/tmp/*,*.so,*.swp,*.zip
set path+=**
" Prevent visual/terminal bells
set noerrorbells
set novisualbell
set t_vb=
" Basic file handling
set autoread
set nowritebackup
" Small helper: Trim trailing whitespace in current buffer
function! TrimWhitespace()
let l:save = winsaveview()
keeppatterns %s/\s\+$//e
call winrestview(l:save)
endfunction
command! TrimWhitespace call TrimWhitespace()
" Show tabs if more than 1
function! StatusTabs()
if tabpagenr('$') > 1
return printf('[T:%d/%d]', tabpagenr(), tabpagenr('$'))
endif
return ''
endfunction
" Show buffers if more than 1
function! StatusBuffers()
let l:buffers = filter(range(1, bufnr('$')), 'buflisted(v:val)')
if len(l:buffers) > 1
return printf('[B:%d/%d]', bufnr('%'), len(l:buffers))
endif
return ''
endfunction
" ALE errors and warnings
function! StatusALE()
let l:e = exists('*ale#statusline#Count') ? ale#statusline#Count('E') : 0
let l:w = exists('*ale#statusline#Count') ? ale#statusline#Count('W') : 0
if l:e > 0 || l:w > 0
return printf('E:%d W:%d', l:e, l:w)
endif
return ''
endfunction
" Minimal statusline
function! StatusMode()
let l:ms = mode()
if l:ms ==# 'n'
return 'NORMAL'
elseif l:ms ==# 'i'
return 'INSERT'
elseif l:ms ==# 'R' || l:ms ==# 'Rv'
return 'REPLACE'
elseif l:ms ==# 'v' || l:ms ==# 'V' || l:ms ==# "\<C-v>"
return 'VISUAL'
elseif l:ms ==# 'c'
return 'COMMAND'
elseif l:ms ==# 't'
return 'TERMINAL'
else
return toupper(l:ms)
endif
endfunction
" Simple mappings
nnoremap <silent> <leader>e :Lexplore<CR>
nnoremap <silent> <C-l> :nohlsearch<CR>
" --- Window/buffer navigation with Ctrl + Arrow keys ---
nnoremap <C-Left> <C-w>h
nnoremap <C-Down> <C-w>j
nnoremap <C-Up> <C-w>k
nnoremap <C-Right> <C-w>l
nnoremap <C-S-Left> :vertical resize -2<CR>
nnoremap <C-S-Right> :vertical resize +2<CR>
nnoremap <C-S-Up> :resize +1<CR>
nnoremap <C-S-Down> :resize -1<CR>
nnoremap <silent> <Tab> :bnext<CR>
nnoremap <silent> <S-Tab> :bprevious<CR>
nnoremap <silent> <C-A-Right> :tabn<CR>
nnoremap <silent> <C-A-Left> :tabp<CR>
" Stop messing with yank...
" Normal + Visual deletes go to black hole
for cmd in ['d', 'c', 'x', 's']
execute 'nnoremap' cmd '"_'.cmd
execute 'xnoremap' cmd '"_'.cmd
execute 'nnoremap <leader>'.cmd cmd
execute 'xnoremap <leader>'.cmd cmd
endfor
nnoremap <silent> <leader>y "+y
nnoremap <silent> <leader>p "+p
xnoremap <silent> <leader>y "+y
xnoremap <silent> <leader>p "+p
xnoremap p "_dp
xnoremap P "_dP
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment