vim: тумблерне число з відносним числом


15

з

setl nu!

Я можу переключити номер (увімкнути / вимкнути), подібний відносно кількості

setl rnu!

як я можу переключити {off, number, Relax number}?


5
ой чому на Землі це питання було перенесено на СУ? Це питання програмування, пов'язане з інструментом програмування . Це не отримує більше SO ніж це. Програмісти, які зосереджуються на SO (як я), зараз не зможуть знайти цю відповідь, оскільки 5 людей не знають, що таке vim. Піди розберися. META: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
sehe

@sehe, я згоден, це питання для
stackoverflow

Відповіді:


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

дякую Бенуа, я додав ваше рішення як суть
juanpablo

1
@JuanPablo: ммм. Мені подобається мій варіант краще :)
sehe

1
@sehe: Я б сказав те саме про свою версію. :-)

17

Тому що я люблю логічну головоломку, і дуже люблю, коли команда vim вміщує один рядок для стислих повторів ( @:є особистим фаворитом):

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

Це підтримуватиме той самий цикл. Я думаю, що це головним чином тому, що let &nu=1буде неявно встановлено не відносне число - з причин, ймовірно, знайдених у документації :)


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 символи довше - окрім спазму пробілу), оскільки вона є розбірливою. На мій погляд, від подальшого конденсації немає ніяких вигод: його важче набрати і набагато складніше запам’ятати, навіть якщо вам коли-небудь доводилося вводити його з пам'яті. Це буде в картографуванні. Так що версія Бенуа прекрасна, за винятком того, що вона не підходить красиво на одному рядку
11:00

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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.