с
setl nu!
Я могу переключить номер (вкл / выкл), аналогично с относительным номером
setl rnu!
как я могу переключить {выкл, номер, относительный номер}?
Потому что мне нравится логическая головоломка, и мне действительно нравится, когда команда vim помещается в одну строку для кратких повторов (@ : это личный фаворит):
:exec &nu==&rnu? "se nu!" : "se rnu!"
Это будет поддерживать тот же цикл. Я думаю, что это в основном потому, что let &nu=1
будет неявно устанавливать norelativenumber - по причинам, вероятно, найденным в документации :)
if &nu == 1
set rnu
elseif &rnu == 1
set nornu
else
set nu
endif
Начиная с 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]
Для тех, кто хотел бы получить более удобочитаемое решение, вот что я имею в своем .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, чтобы переключаться между режимами относительного и абсолютного чисел!
Другая альтернатива, как Эрик Андерсон выше:
"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>
" 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>