[prev in list] [next in list] [prev in thread] [next in thread] 

List:       vim
Subject:    Re: <Del> and expandtabs
From:       Benji Fisher <benji () member ! AMS ! org>
Date:       2004-07-31 2:57:00
Message-ID: 20040731025700.GC19604 () localhost ! localdomain
[Download RAW message or body]

On Thu, Jul 29, 2004 at 04:54:45PM +0200, Alexander Rødseth wrote:
> Hi,
> 
> In lack of any other solutions, I wrote a Python-script and added two lines to 
> my .vimrc. If anybody has an even better solution, or any improvements, it is 
> warmly welcomed.
> 
> --- Here's the two lines:
> 
> inoremap <silent> <Del> <ESC>:pyfile ~/.vim/delete.py<CR>i
> nnoremap <silent> <Del> :pyfile ~/.vim/delete.py<CR>
> 
> --- And here's the script:
> 
> # A Python script for the delete key
> # by Alexander Rødseth, 29.07.04
> # Use for whatever you like
[snip]

     I am still catching up on old questions; perhaps I could have saved
you some work if I had answered sooner.  I have not tested this much,
except to check for whether I am off by one or not.  To avoid problems
with the start or end of the line, I use the old trick of inserting a
"extra" character, so the <Esc> reliably lands me on that character.
Then I figure out how much to delete, delete it, and use "s" to return
to Insert mode.

inoremap <Del> x<Esc>:call SmartDel()<CR>s
fun! SmartDel()
  let c = col(".")
  let v = virtcol(".")
  " The maximum number of characters to delete, if there are many spaces:
  let num = &tabstop - ((v - 1) % &tabstop)
  " Get num characters after the extra character.
  let snip = strpart(getline("."), c, num)
  " Only keep leading white space.
  let white = matchstr(snip, '\s*')
  " If there are no tabs, do nothing.  If there are, throw away everything
  " after the first tab.
  let white = substitute(white, '\t.*', '\t', '')
  execute "normal! d" . strlen(white) . "l"
endfun

HTH                                     --Benji Fisher
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic