vim: relativenumber के साथ संख्या टॉगल करें


15

साथ में

setl nu!

मैं relativenumber के समान संख्या (चालू / बंद) टॉगल कर सकता हूं

setl rnu!

मैं {off, number, relativenumber} को कैसे टॉगल कर सकता हूं?


5
aw। पृथ्वी पर इस प्रश्न को एसयू में स्थानांतरित क्यों किया गया? यह एक prorgramming टूल से संबंधित प्रोग्रामिंग प्रश्न है । इससे अधिक एसओ नहीं मिलता है। एसओ (मेरे जैसे) पर ध्यान केंद्रित करने वाले प्रोग्रामर अब इस उत्तर को नहीं खोज पाएंगे क्योंकि 5 लोग नहीं जानते कि विम क्या है। जाओ पता लगाओ। META: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
sehe

@ मुझसे, मैं सहमत हूँ, यह स्टैकओवरफ्लो के लिए एक सवाल है
जुआनपाब्लो

जवाबों:


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

धन्यवाद बेनोइट, मैंने आपका समाधान एक जिस्ट के
जुआनपाब्लो

1
@ जुआनपाब्लो: एमएमएम। मुझे मेरा संस्करण बेहतर लगता है :)
sehe

1
@sehe: मैं अपने संस्करण के बारे में ऐसा ही कहूंगा। :-)

17

क्योंकि मैं एक तर्क पहेली से प्यार करता हूँ, और वास्तव में इसे प्यार करता हूँ, जब एक विम कमांड सक्सेस रिपीट ( @:एक व्यक्तिगत पसंदीदा) के लिए एक ही लाइन पर फिट बैठता है :

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

यह उसी चक्र को बनाए रखेगा। मुझे लगता है कि यह मुख्य रूप से है क्योंकि let &nu=1स्पष्ट रूप से नोरेल्टिवनम्बर सेट किया जाएगा - शायद प्रलेखन में पाए जाने वाले कारणों के लिए :)


3
+1 के रूप में मैं इसे nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>F3 का उपयोग करके तीन विकल्पों के माध्यम से टॉगल करने के लिए एक पंक्ति के रूप में अपने .vimrc फ़ाइल में रख सकता हूं ।

3
आप ऐसा कर सकते हैं nnoremap <silent> <F3>... दृश्य विकर्षण को कम करने और अन्य मैपिंग के साथ हस्तक्षेप करने के लिए।
23

मैं लगभग एक ही (लेकिन छोटी :-) लाइन के साथ आया था जब सवाल पढ़ा exe'se'&nu+&rnu?'rnu!':'nu':।

वैसे, अपने आप को numberऔर relativenumberविकल्पों के बीच संबंध का आश्वासन देने के लिए , देखें :helpg When setting this option

@ib: साझा करने के लिए धन्यवाद। मैं वास्तव में आपके विम कोड गोल्फ से प्यार करता हूं - वहाँ रत्न हैं जो वास्तव में मेरे रोजमर्रा के काम को गति देते हैं; इस मामले में, हालांकि, मैंने विशिष्ट रूप से अपने संस्करण (एक शुद्ध 3 वर्णों के अलावा - व्हॉट्सएप क्रैम्प के अलावा) को चुना है क्योंकि यह सुपाठ्य है। मेरे विचार में, इसे आगे संघनित करने से कोई लाभ नहीं है: यह टाइप करना कठिन हो जाता है और याद रखने में बहुत कठिन होता है, भले ही आपको कभी भी इसे मेमोरी से टाइप करना पड़े । यह एक मैपिंग में होने जा रहा है। तो बेनोइट का संस्करण ठीक है, इसके अलावा एक लाइन पर अच्छी तरह से फिटिंग नहीं है
सेह

8

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]
    

7

उन लोगों के लिए जो अधिक पठनीय समाधान चाहते हैं, निम्नलिखित मेरे पास मेरे .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टॉगल कर सकते हैं!


0

ऊपर एरिक एंडरसन की तरह एक और विकल्प :

"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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.