Friday, November 7, 2014

Re: Changing line numbers from normal to relative



On Thu, Nov 6, 2014 at 5:02 PM, Ben Fritz <fritzophrenic@gmail.com> wrote:
On Thursday, November 6, 2014 2:53:02 PM UTC-6, Salman Halim wrote:
> Hi,
>
> I was wondering if it was possible to switch to relative line numbers once I'm in operator-pending mode and then switch back when done. For example, say I have regular line numbers turned on and I hit 'c' in normal mode on line 24. The numbering changes to relative and goes back to regular numbers after the rest of the command is executed.
>
> I couldn't find an autocommand, but was hoping someone else had already come up with an ingenious way to address this.
>

I did not find any autocmd for it, but I use an expression mapping returning an empty string in normal, visual, and operator-pending modes to accomplish the task:

if exists('+relativenumber')
  nnoremap <expr> <C-Space> CycleLNum()
  xnoremap <expr> <C-Space> CycleLNum()
  onoremap <expr> <C-Space> CycleLNum()

  " function to cycle between normal, relative, and no line numbering
  func! CycleLNum()
    if &l:rnu && !&l:nu
      setlocal nu
    elseif &l:rnu && &l:nu
      setlocal nornu
    elseif &l:nu && !&l:rnu
      setlocal nonu
    else
      setlocal rnu
    endif
    " sometimes (like in op-pending mode) the redraw doesn't happen
    " automatically
    redraw
    " do nothing, even in op-pending mode
    return ""
  endfunc
endif

Thus when I hit <C-Space> in any of these modes, nothing happens, which allows me to continue with my operation, but the line numbering changes as a side effect.


Ben, thank you very much for this; in the absence of an autocommand, this the perfect alternative.

Much appreciated!

Salman

--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: