14

с

setl nu!

Я могу переключить номер (вкл / выкл), аналогично с относительным номером

setl rnu!

как я могу переключить {выкл, номер, относительный номер}?

6 ответов6

17

Потому что мне нравится логическая головоломка, и мне действительно нравится, когда команда vim помещается в одну строку для кратких повторов (@ : это личный фаворит):

:exec &nu==&rnu? "se nu!" : "se rnu!"

Это будет поддерживать тот же цикл. Я думаю, что это в основном потому, что let &nu=1 будет неявно устанавливать norelativenumber - по причинам, вероятно, найденным в документации :)

9
if &nu == 1
   set rnu
elseif &rnu == 1
   set nornu
else
   set nu
endif
8

Начиная с Vim 7.3.1115 это стало немного сложнее сделать.

Причина в том, что помимо "без номеров строк" и "абсолютных номеров строк", теперь есть две настройки для относительных номеров строк: обычные "относительные номера строк" и "относительные номера строк с абсолютным номером на линии курсора".

Говоря более технически, все четыре комбинации 'number' и 'relativenumber' теперь возможны.

Вот как это сделать:

  • Переключите все четыре параметра, без цифрабсолютноеотносительноеотносительное с абсолютным на линии курсора:

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Переключение между номерамиабсолютноеотносительное:

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Переключение между номерамиабсолютноеотносительное с абсолютным на линии курсора:

    :let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]
    
7

Для тех, кто хотел бы получить более удобочитаемое решение, вот что я имею в своем .vimrc

" Relative or absolute number lines
function! NumberToggle()
    if(&nu == 1)
        set nu!
        set rnu
    else
        set nornu
        set nu
    endif
endfunction

nnoremap <C-n> :call NumberToggle()<CR>

Крутая вещь в этом заключается в том, что вы можете нажать Ctrl + N, чтобы переключаться между режимами относительного и абсолютного чисел!

0

Другая альтернатива, как Эрик Андерсон выше:

"Relative with start point or with line number or absolute number lines
function! NumberToggle()
    if(&number == 1)
        set number!
        set relativenumber!
      elseif(&relativenumber==1)
        set relativenumber
        set number
      else
        set norelativenumber
        set number                                                  
    endif
endfunction

nnoremap <C-n> :call NumberToggle()<CR>
0
" put this in your .vimrc or source it from your .vimrc


  function! ToggleRelativeNumber()

      if &relativenumber

           set norelativenumber

      else

           set relativenumber

      endif

  endfunction

  nmap ;r :call ToggleRelativeNumber()<CR>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .