vim: переключать номер с относительным номером

15

с

setl nu!

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

setl rnu!

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

Хуан Пабло
источник
5
ав. с какой стати этот вопрос был перенесен в SU? Это вопрос программирования, связанный с инструментом программирования . Это не получает больше, чем это. Программисты, которые сосредоточены на SO (как я), теперь не смогут найти этот ответ, потому что 5 человек не знают, что такое vim. Пойди разберись. МЕТА: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
sehe
@sehe, я согласен, это вопрос для StackOverflow
juanpablo

Ответы:

9
if &nu == 1
   set rnu
elseif &rnu == 1
   set nornu
else
   set nu
endif
Benoit
источник
спасибо Бенуа, я добавил ваше решение в качестве сущности
juanpablo
1
@JuanPablo: ммм. Мне больше нравится моя версия :)
Сехе
1
@sehe: я бы сказал то же самое о моей версии. :-)
17

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

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

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

sehe
источник
3
+1, поскольку я могу поместить его в мой файл .vimrc как одну строку nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>для переключения между тремя вариантами с помощью F3.
3
Вы могли бы сделать это nnoremap <silent> <F3>... чтобы уменьшить визуальное отвлечение и вмешиваться в другие отображения.
sehe
Я пришел с почти такой же (но более короткими :-) линией , когда прочитал вопрос: exe'se'&nu+&rnu?'rnu!':'nu'.
Кстати, чтобы обеспечить себе связь между numberи relativenumberопциями, см :helpg When setting this option.
@ib: спасибо, что поделились. Мне очень нравятся ваши игры в Vim Code - там есть драгоценные камни, которые действительно ускоряют мою повседневную работу; В этом случае, однако, я специально выбрал свою версию (чистая на 3 символа длиннее - кроме пробела), потому что она разборчива. На мой взгляд, нет никакой выгоды от его дальнейшего сжатия: его становится все труднее печатать и намного труднее запомнить, даже если вам когда-либо приходилось печатать его из памяти. Это будет в картировании. Таким образом, версия Бенуа
хороша
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]
    
glts
источник
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>
clasan
источник
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>
heronsrise
источник