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}?
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}?
Câu trả lời:
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=1
sẽ ngầm đặt norelativenumber - vì lý do có thể được tìm thấy trong tài liệu :)
nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>
để chuyển qua ba tùy chọn bằng F3.
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.
exe'se'&nu+&rnu?'rnu!':'nu'
.
number
và relativenumber
các tùy chọn, xem :helpg When setting this option
.
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'
và'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 đối → tương đối → tươ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 đối → tương đối :
:let [&nu, &rnu] = [&nu+&rnu==0, &nu]
Chuyển đổi giữa không có số → tuyệt đối → tương đối với tuyệt đối trên dòng con trỏ :
:let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]
Đố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!
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>