I've used vim for ages and am really used to inserting four spaces by hitting tab, but then being deleting them one by one. Now that I've switched to neovim this has changed to it inserting four spaces in one go but also deleting four in one go, which means I often delete far too much.
This is my .vimrc file - some of it might be nonsense, it's "evolved" over the years, but thought I should show it in full here:
set nocompatible " be iMproved, required source ~/.vim/plugins.vim execute pathogen#infect() syntax enable "automatically source .vimrc whenever saved (instead of typing :so %) augroup autocommands autocmd! autocmd BufWritePost .vimrc source % augroup END "--------------------------Mappings------------------------------" "quick route to editing vimrc file nmap ,ev :tabedit $MYVIMRC<cr> "add simple highlight removal nmap ,<space> :nohlsearch<cr> nmap <F1> :NERDTreeToggle<cr> nmap <F2> <C-w><C-w> filetype plugin indent on set tabstop=4 " show existing tab with 4 spaces width set shiftwidth=4 " when indenting with '>', use 4 spaces width set expandtab " On pressing tab, insert 4 spaces set nowrap " no wrap set number " gutter numbers if has('mouse') set mouse=a " mouse works endif set backspace=start,indent,eol " set standard backspace behaviour set t_Co=256 " colourscheme stuff colorscheme molokai " colourscheme highlight LineNr ctermfg=239 " make gutter numbers more subtle highlight LineNr ctermbg=233 " make gutter numbers more subtle highlight ExtraWhitespace ctermbg=red guibg=red match ExtraWhitespace /\s\+$/ let php_sync_method = 0 " this makes sure that the syntax highlighting always works " autocmd CursorMovedI * if pumvisible() == 0|pclose|endif " autocmd InsertLeave * if pumvisible() == 0|pclose|endif """ autocmd FileType php set omnifunc=phpcomplete#CompletePHP "" set completeopt=longest,menuone " The encoding displayed. set encoding=utf-8 " The encoding written to file. set fileencoding=utf-8 let g:netrw_banner = 0 let g:netrw_liststyle = 3 let g:netrw_browse_split = 4 let g:netrw_altv = 1 let g:netrw_winsize = 15 autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif let g:NERDTreeDirArrowExpandable = '>' let g:NERDTreeDirArrowCollapsible = 'V' if has('nvim') " disable the auto-search - I prefer to finish typing and hit enter set nois " disable the fact that you can delete 4 spaces in one go set softtabstop=0 endif
I thought from googling that adding that penultimate line
set softtabstop=0 would make the difference, but it doesn't seem to.