vim: toggle number dengan relativenumber

14

dengan

setl nu!

Saya dapat mengaktifkan nomor (on / off), mirip dengan nomor relativen

setl rnu!

bagaimana saya bisa beralih {off, number, relativenumber}?

juanpablo
sumber
5
aw. mengapa pertanyaan ini dimigrasi ke SU? Ini adalah sebuah pemrograman pertanyaan terkait dengan a alat pemrograman . Tidak mendapatkan lebih dari itu. Programmer yang fokus pada SO (seperti saya) sekarang tidak dapat menemukan jawaban ini karena 5 orang tidak tahu apa itu vim. Sosok pergi. META: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
sehe
@ Ya, saya setuju, ini pertanyaan untuk stackoverflow
juanpablo

Jawaban:

9
if &nu == 1
   set rnu
elseif &rnu == 1
   set nornu
else
   set nu
endif
Benoit
sumber
terima kasih Benoit, saya menambahkan solusi Anda sebagai inti
juanpablo
1
@JuanPablo: mmm. Saya lebih suka versi saya :)
sehe
1
@ Sehe: Saya akan mengatakan hal yang sama tentang versi saya :-)
16

Karena saya suka teka-teki logika, dan sangat menyukainya ketika perintah vim cocok pada satu baris untuk pengulangan singkat @ : adalah favorit pribadi):

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

Ini akan mempertahankan siklus yang sama. Saya pikir itu terutama karena let &nu=1 akan secara implisit mengatur norelativenumber - untuk alasan yang mungkin ditemukan dalam dokumentasi :)

sehe
sumber
2
Memberi +1 karena saya dapat menempatkannya di file .vimrc saya sebagai satu baris nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR> untuk beralih melalui tiga opsi menggunakan F3.
3
kamu bisa membuat itu nnoremap <silent> <F3>... untuk mengurangi gangguan visual dan mengganggu pemetaan lainnya.
sehe
Saya datang dengan baris yang hampir sama (tapi lebih pendek :-) ketika membaca pertanyaan: exe'se'&nu+&rnu?'rnu!':'nu'.
Ngomong-ngomong, untuk meyakinkan diri Anda tentang hubungan antara number dan relativenumber opsi, lihat :helpg When setting this option.
@ib: terima kasih sudah berbagi. Saya sangat suka golf kode vim Anda - ada permata di sana yang benar-benar mempercepat pekerjaan saya sehari-hari; Dalam hal ini, bagaimanapun, saya telah secara khusus memilih versi saya (lebih lama 3 karakter - selain kram spasi) karena dapat dibaca. Dalam pandangan saya, tidak ada keuntungan dari kondensasi lebih lanjut: itu menjadi lebih sulit untuk diketik dan jauh lebih sulit untuk diingat bahkan jika Anda pernah harus ketik dari memori. Ini akan menjadi pemetaan. Jadi versi Benoit baik-baik saja, kecuali untuk itu tidak pas pada satu baris
sehe
8

Pada Vim 7.3.1115 ini menjadi sedikit lebih rumit untuk dilakukan.

Alasannya adalah bahwa selain "tidak ada nomor baris" dan "nomor baris absolut", ada sekarang dua pengaturan untuk nomor baris relatif: "nomor baris relatif" biasa, dan "nomor baris relatif dengan angka absolut pada garis kursor"

Lebih teknis, keempat kombinasi 'number' dan 'relativenumber' sekarang mungkin.

Berikut cara beralih:

  • Alihkan keempat pengaturan, tidak ada angka mutlak relatif relatif dengan absolut di garis kursor :

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Beralih di antara tidak ada angka mutlak relatif :

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Beralih di antara tidak ada angka mutlak relatif dengan absolut di garis kursor :

    :let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]
    
glts
sumber
5

Bagi mereka yang menginginkan solusi yang lebih mudah dibaca, berikut ini adalah apa yang saya miliki di .vimrc saya

" 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>

Yang keren tentang ini adalah Anda dapat menekan ctrl + n untuk beralih antara mode angka relatif dan absolut!

Eric Anderson
sumber
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>
heronsrise
sumber
-1

Alternatif lain seperti Eric Anderson atas:

"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>
clasan
sumber