Fandom

Vim Tips Wiki

Whitespace hungry backspace/delete

Redirected from VimTip1046

1,624pages on
this wiki
Add New Page
Talk0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Tip 1046 Printable Monobook Previous Next

created 2005 · complexity basic · author brailsmt · version 6.0


I think I figured out a good whitespace hungry delete.

imap <BS> <Esc>d?\S?e1<CR>i

It deletes from the cursor position backwards in the file until it finds the first non-whitespace character, and then changes the match end offset to avoid deleting that non-whitespace char.

CommentsEdit

Can you make one that will delete (or backspace) in tab-space chunks?

I use soft-tabs so it would be nice to be able to backspace over 4 whitespaces at a time (if they exist).


Unfortunately that doesn't faithfully reproduce <BS> under all circumstances. Try something like this (still not perfect).

function! HungryBackspaceWrapper()
  let column = col('.')
  if column == 1
    return "\<Esc>kJxi"
  elseif column >= 2 && getline('.')[column - 2] =~ '\S'
    return "\<BS>"
  else
    return "\<Esc>d?\\S?e1\<CR>i"
  endif
endfunction
inoremap <silent> <BS> <c-r>=HungryBackSpaceWrapper()<CR>

Are you sure you don't want to set backspace=indent,eol,start


Yeah, that seems to only work if the indentations have been automatically inserted. Example, I can type 8 spaces at the beginning of a line and hit backspace, it will only delete one space.

Also, this will not work for removing "tabs" in the middle or end of lines.


Why not use

vgeld
v - visual,
ge - backward to the end of the Nth word
l - move right
d - delete.

It doesn't span blank lines.


set softtabstop=4 helps. Not sure whether set smarttab is also necessary to make bs delete 4 Spaces


It seems like it is.


Was looking for something like this, because whenever I paste code with the middle mouse button, the tab's get converted to 8x space's. Figured out a regex switch that works for me

 :%s/\s\{8\}/\t/g 

Change "%" to "." to work only on the current line, may remove "g" if all your 8x spaces are at line beginnings.

It would be better to use the :retab command. See Super retab. JohnBeckett 07:56, June 22, 2011 (UTC)

Also on Fandom

Random Wiki