Files
OpenBSD-Notes/vim/.vimrc
T
2026-09-21 18:30:38 +03:00

287 lines
7.8 KiB
VimL

set background=dark
set t_RB=
colorscheme molokai
if &compatible
set nocompatible
endif
" ---------------------------------------------------------------------------
" Leader key
" ---------------------------------------------------------------------------
let mapleader = " "
let maplocalleader = " "
nnoremap <Space> <Nop>
set timeoutlen=500
" ---------------------------------------------------------------------------
" Sensible interface defaults
" ---------------------------------------------------------------------------
syntax enable
filetype plugin indent on
set number
set cursorline
set ruler
set showcmd
set showmode
set laststatus=2
set showtabline=2
set wildmenu
set wildmode=longest:full,full
set scrolloff=4
set sidescrolloff=4
set splitbelow
set splitright
set hidden
set confirm
set mouse=a
" Search as you type; keep searches case-sensitive only when capitals are used.
set incsearch
set hlsearch
set ignorecase
set smartcase
" Comfortable editing defaults.
set backspace=indent,eol,start
set autoindent
set smartindent
set expandtab
set tabstop=2
set shiftwidth=2
set softtabstop=2
" Python convention: four-space indentation.
augroup simple_indentation
autocmd!
autocmd FileType python setlocal expandtab tabstop=4 shiftwidth=4 softtabstop=4
augroup END
" Use the desktop clipboard when this Vim build supports it.
if has('clipboard')
set clipboard=unnamedplus
endif
" ---------------------------------------------------------------------------
" Built-in file browser (netrw): tree-style sidebar, no plugin required
" ---------------------------------------------------------------------------
let g:netrw_banner = 0
let g:netrw_liststyle = 3
let g:netrw_winsize = 25
let g:netrw_keepdir = 1
let g:netrw_altv = 1
" Space-e: toggle the file browser on the left.
nnoremap <silent> <leader>e :Lexplore<CR>
" Useful keys while the file browser is focused:
" Enter open file or directory
" t open file in a new tab
" - go to the parent directory
" R rename selected file
" D delete selected file
" % create a new file
" d create a new directory
" ---------------------------------------------------------------------------
" Tabs
" ---------------------------------------------------------------------------
nnoremap <silent> <Tab> gt
nnoremap <silent> <S-Tab> gT
nnoremap <silent> <leader>t :tabnew<CR>
nnoremap <silent> <leader>c :tabclose<CR>
" Move the current tab left or right.
nnoremap <silent> <leader>[ :tabmove -1<CR>
nnoremap <silent> <leader>] :tabmove +1<CR>
" ---------------------------------------------------------------------------
" Everyday shortcuts (each is Leader plus one key)
" ---------------------------------------------------------------------------
nnoremap <silent> <leader>s :write<CR>
nnoremap <silent> <leader>q :quit<CR>
nnoremap <silent> <leader>x :write<CR>:quit<CR>
nnoremap <silent> <leader>/ :nohlsearch<CR>
" Move between split windows.
nnoremap <silent> <leader>h <C-w>h
nnoremap <silent> <leader>j <C-w>j
nnoremap <silent> <leader>k <C-w>k
nnoremap <silent> <leader>l <C-w>l
" ---------------------------------------------------------------------------
" Project navigation
" ---------------------------------------------------------------------------
" Search recursively from Vim's current directory.
set path+=**
" Ignore generated and dependency directories.
set wildignore+=*/.git/*
set wildignore+=*/node_modules/*
set wildignore+=*/dist/*
set wildignore+=*/build/*
set wildignore+=*/coverage/*
" Space-f: type part of a filename and press Tab.
nnoremap <leader>f :find<Space>
" Space-o: show previously opened files.
nnoremap <silent> <leader>o :browse oldfiles<CR>
" Space-b: list buffers, then type the buffer number and press Enter.
nnoremap <leader>b :buffers<CR>:buffer<Space>
function! ProjectSearch()
let l:query = input('Search project: ')
if empty(l:query)
return
endif
execute 'silent vimgrep /\V'
\ . escape(l:query, '/\')
\ . '/gj **/*'
copen
endfunction
nnoremap <silent> <leader>g :call ProjectSearch()<CR>
nnoremap <silent> <leader>n :cnext<CR>
nnoremap <silent> <leader>p :cprevious<CR>
function! ReindentFile()
let l:view = winsaveview()
normal! gg=G
call winrestview(l:view)
endfunction
nnoremap <silent> <leader>i :call ReindentFile()<CR>
xnoremap <silent> <leader>i =gv
" Save all modified files.
nnoremap <silent> <leader>a :wall<CR>
" Splits.
nnoremap <silent> <leader>v :vsplit<CR>
nnoremap <silent> <leader>- :split<CR>
nnoremap <silent> <leader>= <C-w>=
" Reload the configuration after editing ~/.vimrc.
nnoremap <silent> <leader>r :source $MYVIMRC<CR>
" Quickly leave Insert mode.
inoremap jk <Esc>
" ---------------------------------------------------------------------------
" Keymap help screen
" ---------------------------------------------------------------------------
function! ShowKeymapHelp()
" Open the help in a temporary buffer.
enew
silent file Vim-Keymaps
setlocal buftype=nofile
setlocal bufhidden=wipe
setlocal noswapfile
setlocal nobuflisted
setlocal nomodified
setlocal nowrap
setlocal nonumber
setlocal norelativenumber
setlocal nocursorline
call setline(1, [
\ 'VIM KEYMAPS',
\ '===========',
\ '',
\ 'Leader key: Space',
\ '',
\ 'FILES AND BROWSING',
\ ' Space e Toggle file browser',
\ ' Space f Find project file',
\ ' Space o Recently opened files',
\ ' Space b List open buffers',
\ '',
\ 'Inside the file browser:',
\ ' Enter Open file or directory',
\ ' t Open file in new tab',
\ ' - Parent directory',
\ ' % Create file',
\ ' d Create directory',
\ ' R Rename file',
\ ' D Delete file',
\ '',
\ 'TABS',
\ ' Tab Next tab',
\ ' Shift-Tab Previous tab',
\ ' Space t Create new tab',
\ ' Space c Close current tab',
\ ' Space [ Move tab left',
\ ' Space ] Move tab right',
\ '',
\ 'SEARCH',
\ ' Space g Search text in project',
\ ' Space n Next search result',
\ ' Space p Previous search result',
\ ' Space / Clear search highlighting',
\ '',
\ 'EDITING',
\ ' Space s Save current file',
\ ' Space a Save all files',
\ ' Space i Auto-indent entire file',
\ ' jk Leave Insert mode',
\ '',
\ 'WINDOWS',
\ ' Space v Vertical split',
\ ' Space - Horizontal split',
\ ' Space = Equalize split sizes',
\ ' Space h Move to left window',
\ ' Space j Move to lower window',
\ ' Space k Move to upper window',
\ ' Space l Move to right window',
\ '',
\ 'VIM',
\ ' Space q Quit',
\ ' Space x Save and quit',
\ ' Space r Reload .vimrc',
\ ' Space ? Show this screen',
\ '',
\ 'Press q or Esc to close this screen.',
\ 'Press Space e to open the file browser.',
\ ])
setlocal nomodifiable
normal! gg
" These mappings work only inside this help screen.
nnoremap <silent> <buffer> q :bdelete!<CR>
nnoremap <silent> <buffer> <Esc> :bdelete!<CR>
endfunction
" Show the help screen manually.
nnoremap <silent> <leader>? :call ShowKeymapHelp()<CR>
" Detect whether Vim is receiving piped input.
let g:vim_reading_stdin = 0
augroup keymap_help_startup
autocmd!
autocmd StdinReadPre * let g:vim_reading_stdin = 1
" Show the help only when Vim starts without a filename.
autocmd VimEnter *
\ if argc() == 0 && !g:vim_reading_stdin |
\ call ShowKeymapHelp() |
\ endif
augroup END