" in insert mode tab key autocompletes function! TabOrComplete() let line = getline('.') let col = col('.') if col > 1 && strpart(line, col - 2, 3) =~ '^\w' return "\" else return "\" endif endfunction inoremap =TabOrComplete() " only do this if autocommands enabled if has("autocmd") " enable file type detection and load indent files filetype plugin indent on " line numbering toggle autocmd InsertEnter * :set norelativenumber autocmd InsertLeave * :set relativenumber " at startup, jump to last cursor position if valid augroup vimStartup au! autocmd BufReadPost * \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' \ | exe "normal! g`\"" \ | endif augroup END endif " in normal mode tab key cycles through tabs nnoremap :tabnext nnoremap :tabprev " display set display=truncate " show @@@ in the last line if it is truncated set number " enable line numbering set relativenumber " relative line numbering set ruler " show the cursor position all the time set scrolloff=5 " show a few lines around the cursor set showcmd " display incomplete commands set showtabline=2 " always show tab bar set wrap linebreak " break on words not chars " editing set backspace=indent,eol,start " backspace over everything in insert set shiftwidth=4 " 4-space shiftwidth set softtabstop=4 " 4-space tabs set tabstop=4 " 4-space tabs set ttimeout " time out for key codes set ttimeoutlen=100 " wait up to 100ms after esc for special key " startup set directory=~/.vim/swapfiles//,/tmp// " common swap directory " no bars for vertical split set fillchars+=vert:\ " switch syntax highlighting on syntax enable " ale let g:ale_fix_on_save = 1 let g:ale_linters = { 'rust': [ 'analyzer' ] } let g:ale_fixers = { 'rust': [ 'rustfmt' ], '*': [ 'trim_whitespace', 'remove_trailing_lines' ] } let g:ale_rust_analyzer_config = { 'check': { 'command': 'clippy' } }