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
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 :)
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 :
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!
" 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>
"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>
Jawaban:
sumber
Karena saya suka teka-teki logika, dan sangat menyukainya ketika perintah vim cocok pada satu baris untuk pengulangan singkat @ : adalah favorit pribadi):
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 :)sumber
nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>
untuk beralih melalui tiga opsi menggunakan F3.nnoremap <silent> <F3>
... untuk mengurangi gangguan visual dan mengganggu pemetaan lainnya.exe'se'&nu+&rnu?'rnu!':'nu'
.number
danrelativenumber
opsi, lihat:helpg When setting this option
.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 :
Beralih di antara tidak ada angka → mutlak → relatif :
Beralih di antara tidak ada angka → mutlak → relatif dengan absolut di garis kursor :
sumber
Bagi mereka yang menginginkan solusi yang lebih mudah dibaca, berikut ini adalah apa yang saya miliki di .vimrc saya
Yang keren tentang ini adalah Anda dapat menekan ctrl + n untuk beralih antara mode angka relatif dan absolut!
sumber
sumber
Alternatif lain seperti Eric Anderson atas:
sumber