เป็นกลุ่ม: หมายเลขสลับกับ relativenumber


15

กับ

setl nu!

ฉันสามารถสลับหมายเลข (เปิด / ปิด) คล้ายกับ relativenumber

setl rnu!

ฉันจะสลับ {off, number, relativenumber} ได้อย่างไร


5
AW เหตุใดคำถามนี้จึงถูกโยกย้ายมายัง SU มันเป็นคำถามการเขียนโปรแกรมที่เกี่ยวข้องกับเครื่องมือการเขียนโปรแกรมล่วงหน้า ไม่ได้รับมากไปกว่านั้น โปรแกรมเมอร์ที่มุ่งเน้นไปที่ SO (เช่นฉัน) จะไม่สามารถหาคำตอบนี้ได้เพราะ 5 คนไม่ทราบว่ากลุ่มคืออะไร ไปคิด META: 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

ขอบคุณเบอนัวต์ฉันเพิ่มวิธีการแก้ปัญหาของคุณเป็นส่วนสำคัญ
juanpablo

1
@JuanPablo: mmm ผมชอบรุ่นของฉันดีกว่า :)
sehe

1
@sehe: ฉันจะพูดเกี่ยวกับรุ่นของฉันเหมือนกัน :-)

17

เพราะฉันชอบเกมลอจิกปริศนาและรักจริง ๆ เมื่อคำสั่ง vim พอดีกับบรรทัดเดียวสำหรับการทำซ้ำแบบย่อ ( @:เป็นรายการโปรดส่วนตัว):

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

สิ่งนี้จะรักษาวงจรเดียวกัน ฉันคิดว่ามันเป็นเพราะส่วนใหญ่let &nu=1จะกำหนด norelativenumber - ด้วยเหตุผลอาจพบในเอกสาร :)


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: ขอบคุณสำหรับการแบ่งปัน ฉันรักกอล์ฟรหัสเรียกของคุณ - มีอัญมณีอยู่ในนั้นที่ทำให้ฉันทำงานเร็วขึ้นทุกวัน ในกรณีนี้ฉันเลือกรุ่นของฉันโดยเฉพาะ (ยาวกว่า 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.