vim: chuyển số với relativenumber


15

với

setl nu!

Tôi có thể chuyển số (bật / tắt), tương tự với số tương đối

setl rnu!

Làm thế nào tôi có thể chuyển {off, number, relativenumber}?


5
ôi Tại sao câu hỏi này được chuyển sang SU? Đây là một câu hỏi lập trình liên quan đến một công cụ lập trình . Nó không nhận được nhiều SO hơn thế. Các lập trình viên tập trung vào SO (như tôi) bây giờ sẽ không thể tìm thấy câu trả lời này vì 5 người không biết vim là gì. Đi hình. META: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
sehe

@sehe, tôi đồng ý, đây là một câu hỏi cho stackoverflow
juanpablo

Câu trả lời:


9
if &nu == 1
   set rnu
elseif &rnu == 1
   set nornu
else
   set nu
endif

cảm ơn Benoit, tôi đã thêm giải pháp của bạn như một ý chính
juanpablo

1
@JuanPablo: mmm. Tôi thích phiên bản của tôi hơn :)
sehe

1
@sehe: Tôi cũng sẽ nói như vậy về phiên bản của tôi. :-)

17

Bởi vì tôi yêu một câu đố logic và thực sự thích nó khi một lệnh vim khớp với một dòng duy nhất cho sự lặp lại cô đọng ( @:là một yêu thích cá nhân):

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

Điều này sẽ duy trì cùng một chu kỳ. Tôi nghĩ rằng nó chủ yếu là vì let &nu=1sẽ ngầm đặt norelativenumber - vì lý do có thể được tìm thấy trong tài liệu :)


3
+1 vì tôi có thể đặt nó trong tệp .vimrc của mình dưới dạng một dòng nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>để chuyển qua ba tùy chọn bằng F3.

3
bạn có thể làm điều đó nnoremap <silent> <F3>... để giảm sự phân tâm thị giác và can thiệp vào các ánh xạ khác.
sehe

Tôi đã đưa ra gần như giống nhau (nhưng ngắn hơn :-) dòng khi đọc câu hỏi : exe'se'&nu+&rnu?'rnu!':'nu'.

Nhân tiện, để đảm bảo cho mình về kết nối giữa numberrelativenumbercác tùy chọn, xem :helpg When setting this option.

@ib: cảm ơn đã chia sẻ. Tôi thực sự yêu thích golf vim code của bạn - có những viên đá quý trong đó thực sự tăng tốc công việc hàng ngày của tôi; Tuy nhiên, trong trường hợp này, tôi đã chọn cụ thể phiên bản của mình (dài hơn 3 ký tự - bên cạnh chuột rút không gian) vì nó dễ đọc. Theo quan điểm của tôi, sẽ không có bất kỳ lợi ích nào từ việc cô đọng nó thêm nữa: việc nhập và khó nhớ hơn rất nhiều ngay cả khi bạn phải gõ nó từ bộ nhớ. Điều này sẽ được trong một bản đồ. Vì vậy, phiên bản của Benoit vẫn ổn, ngoại trừ phiên bản không phù hợp trên một dòng duy nhất
sehe

8

Kể từ Vim 7.3.1115, việc này trở nên phức tạp hơn một chút.

Lý do là ngoài "không có số dòng" và "số dòng tuyệt đối", giờ đây có hai cài đặt cho số dòng tương đối: "số dòng tương đối" thông thường và "số dòng tương đối với số tuyệt đối trên dòng con trỏ".

Nói một cách kỹ thuật hơn, tất cả bốn kết hợp 'number''relativenumber' hiện có thể.

Đây là cách chuyển đổi:

  • Chuyển đổi tất cả bốn cài đặt, không có sốtuyệt đốitương đốitương đối với tuyệt đối trên dòng con trỏ :

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Chuyển đổi giữa không có sốtuyệt đốitương đối :

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Chuyển đổi giữa không có sốtuyệt đốitương đối với tuyệt đối trên dòng con trỏ :

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

7

Đối với những người muốn một giải pháp dễ đọc hơn, sau đây là những gì tôi có trong .vimrc của mình

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

Điều thú vị ở đây là bạn có thể nhấn ctrl+ nđể chuyển đổi giữa chế độ số tương đối và số tuyệt đối!


0

Một cách khác như Eric Anderson ở trên:

"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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.