กับ
setl nu!
ฉันสามารถสลับหมายเลข (เปิด / ปิด) คล้ายกับ relativenumber
setl rnu!
ฉันจะสลับ {off, number, relativenumber} ได้อย่างไร
กับ
setl nu!
ฉันสามารถสลับหมายเลข (เปิด / ปิด) คล้ายกับ relativenumber
setl rnu!
ฉันจะสลับ {off, number, relativenumber} ได้อย่างไร
คำตอบ:
if &nu == 1
set rnu
elseif &rnu == 1
set nornu
else
set nu
endif
เพราะฉันชอบเกมลอจิกปริศนาและรักจริง ๆ เมื่อคำสั่ง vim พอดีกับบรรทัดเดียวสำหรับการทำซ้ำแบบย่อ ( @:เป็นรายการโปรดส่วนตัว):
:exec &nu==&rnu? "se nu!" : "se rnu!"
สิ่งนี้จะรักษาวงจรเดียวกัน ฉันคิดว่ามันเป็นเพราะส่วนใหญ่let &nu=1
จะกำหนด norelativenumber - ด้วยเหตุผลอาจพบในเอกสาร :)
nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>
เพื่อสลับผ่านสามตัวเลือกโดยใช้ F3
nnoremap <silent> <F3>
... เพื่อลดความฟุ้งซ่านทางสายตาและรบกวนการแมปอื่น ๆ
number
และตัวเลือกดูrelativenumber
:helpg When setting this option
ในฐานะของ 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เพื่อสลับระหว่างโหมดญาติและโหมดตัวเลขแน่นอน!
ทางเลือกอื่นเช่น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>
" 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>