vim : relativenumber를 가진 숫자 토글


15

setl nu!

relativenumber와 유사하게 숫자를 켜거나 끌 수 있습니다.

setl rnu!

{off, number, relativenumber}를 전환하는 방법은 무엇입니까?


5
아. 지구상에서이 질문이 왜 SU로 이전 되었습니까? 이것은 프로그램 도구 와 관련된 프로그래밍 문제 입니다. 그것보다 더 많은 것을 얻지 못합니다. 5 명은 vim이 무엇인지 모르기 때문에 (나 같은) SO에 초점을 맞춘 프로그래머는 이제이 답변을 찾을 수 없습니다. 그림을 이동. 메타 : 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 : 음. 나는 내 버전을 좋아한다 :)
sehe

1
@ sehe : 내 버전에 대해 똑같이 말할 것입니다. :-)

17

나는 논리 퍼즐을 좋아하고 vim 명령이 간결한 반복을 위해 한 줄에 들어갈 때 정말 좋아하기 때문에 ( @:개인이 좋아하는 것입니다).

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

동일한주기를 유지합니다. 나는 그것이 let &nu=1암묵적으로 norelativenumber를 설정 하기 때문이라고 생각합니다 -아마도 문서에서 찾을 수있는 이유로 :)


3
.vimrc 파일에 한 줄로 배치 nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>하여 F3을 사용하여 세 가지 옵션을 전환 할 수 있으므로 +1 입니다.

3
nnoremap <silent> <F3>시각적 혼란을 줄이고 다른 매핑을 방해하기 위해 만들 수 있습니다.
sehe

질문을 읽을 때 거의 동일한 (그러나 더 짧은 :-) 줄을 생각해 냈습니다 exe'se'&nu+&rnu?'rnu!':'nu'.

그건 그렇고, 옵션 numberrelativenumber옵션 사이의 연결을 보장하려면을 참조하십시오 :helpg When setting this option.

@ib : 공유해 주셔서 감사합니다. 나는 당신의 vim 코드 골프를 정말 좋아합니다. 저의 일상 업무 속도를 높이는 보석이 있습니다. 그러나이 경우, 나는 읽기 쉽기 때문에 내 버전 (whtiespace 경련 외에도 3 자 이상)을 선택했습니다. 내보기에, 그것을 더 응축에서 어떤 이득이되지 않습니다 : 어렵게 얻을 않습니다 만약 당신이 경우에도 기억하는 많은 열심히 입력하고 했다 메모리에서를 입력합니다. 이것은 매핑 될 것입니다. 벤와의 버전 벌금 그래서, 한 행에 잘 피팅 없습니다를 제외하고
sehe

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

위의 Eric Anderson 과 같은 다른 대안 :

"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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.