2011-07-29 10 views
20

क्या किसी को पता है कि अगर Vim Relative Line Numbers इस तरह कुछ कुछ emacs के लिए मौजूद है? मैं विंपल्स और आदमी का उपयोग करता हूं, जो कि बहुत आसान होगा! मुझे कुछ लापरवाही पता है, इसलिए अगर ऐसा नहीं होता है, तो मैं सही दिशा में एक बिंदु प्राप्त करने के लिए अपना खुद का प्रयास करने की कोशिश कर सकता हूं।Emacs में सापेक्ष रेखा संख्या

अद्यतन: सही जवाब के लिए धन्यवाद, मैं इस के साथ आया था, कि पिछले लाइन के लिए मौजूदा लाइन के लिए 1, और -1 दिखाएगा, vimpulse yanks और हटाता साथ संयोजन के लिए।

धन्यवाद जिन्होंने सभी की मदद की! मुझे पता है कि यह वास्तव में विम नहीं करता है, लेकिन शून्य में शुरू होने वाले विम में सापेक्ष रेखा संख्या क्या अच्छी है ?? मूर्खतापूर्ण vim। एम एक्सlinum-mode पर

(defvar my-linum-current-line-number 0) 

(setq linum-format 'my-linum-relative-line-numbers) 

(defun my-linum-relative-line-numbers (line-number) 
    (let ((test2 (1+ (- line-number my-linum-current-line-number)))) 
    (propertize 
    (number-to-string (cond ((<= test2 0) (1- test2)) 
          ((> test2 0) test2))) 
    'face 'linum))) 

(defadvice linum-update (around my-linum-update) 
    (let ((my-linum-current-line-number (line-number-at-pos))) 
    ad-do-it)) 
(ad-activate 'linum-update) 
+0

तरह स्टीव ने कहा, वह Emacs में vimpulse उपयोग करता है। http://www.emacswiki.org/emacs/Vimpulse – phils

+0

@phils - आह, धन्यवाद, पोस्ट के उस बिट को याद किया। – jtahlborn

+0

स्टीव, मैंने लिनम-प्रारूप फ़ंक्शन आउटपुट के लिए सही चेहरे का उपयोग करने के लिए अपने संस्करण को बग फिक्स के साथ अपडेट करने की स्वतंत्रता ली है। – phils

उत्तर

13

(2012-03-16:। लाइन नंबर अब दाएँ संरेखित हैं, और सही चेहरा में दिखाया गया है)

समस्या यहाँ, उस समय तक एक कस्टम linum-format समारोह कहा जाता है बिंदु पहले से ही ले जाया गया है (linum-update-window द्वारा) प्रश्न में लाइन के लिए, इसलिए हम अब दो लाइनों के बीच अंतर स्थापित करने के लिए इसका उपयोग नहीं कर सकते हैं; यह सिर्फ हर पंक्ति के लिए शून्य मुद्रित करेगा।

एक linum-before-numbering-hook नहीं है, लेकिन इस चलाया जाता है के बाद बिंदु बफर के शुरू होने से ले जाया गया है, ताकि हमारे उद्देश्य के लिए उपयोगी नहीं है।

निम्नलिखित कोड वर्तमान पंक्ति संख्या को संग्रहीत करने के लिए linum-update के लिए सलाह का उपयोग कर समस्या हल करता है, ताकि यह कस्टम linum-format फ़ंक्शन पर उपलब्ध हो सके।

करने के लिए संख्या मैं शुरू में इस आधार पर कि एक एकल खिड़की कोड के 100 से अधिक लाइनों दिखाने पर %3d की एक हार्ड-कोडेड प्रारूप स्ट्रिंग इस्तेमाल किया सही संरेखित बहुत संभावना नहीं था। यदि आप follow-mode के प्रशंसक हैं, हालांकि (या केवल एक ही बफर पर एकाधिक विंडो हैं), तो वह परिस्थिति अत्यधिक संभावना हो जाती है; इसलिए कोड अब गतिशील रूप से आवश्यक कॉलम की संख्या की गणना करता है। linum-before-numbering-hook का उपयोग डिफ़ॉल्ट dynamic लिनम प्रारूप द्वारा किए गए दृष्टिकोण से अधिक कुशल बनाता है।

ध्यान दें कि अगर आप add-hook बाहर टिप्पणी, तेजी से गैर-डायनामिक दृष्टिकोण प्रयोग किया जाता है।

(defvar my-linum-format-string "%3d") 

(add-hook 'linum-before-numbering-hook 'my-linum-get-format-string) 

(defun my-linum-get-format-string() 
    (let* ((width (1+ (length (number-to-string 
          (count-lines (point-min) (point-max)))))) 
     (format (concat "%" (number-to-string width) "d"))) 
    (setq my-linum-format-string format))) 

(defvar my-linum-current-line-number 0) 

(setq linum-format 'my-linum-relative-line-numbers) 

(defun my-linum-relative-line-numbers (line-number) 
    (let ((offset (- line-number my-linum-current-line-number))) 
    (propertize (format my-linum-format-string offset) 'face 'linum))) 

(defadvice linum-update (around my-linum-update) 
    (let ((my-linum-current-line-number (line-number-at-pos))) 
    ad-do-it)) 
(ad-activate 'linum-update) 
+0

दो प्रश्न। '-' उपसर्ग के बिना नकारात्मक रेखा संख्या कैसे हो सकती है? और मैं लाइन लाइनों को उसी रेखा सेटिंग से कैसे बच सकता हूं जो वे प्रतिनिधित्व करते हैं? उदाहरण के लिए, टिप्पणी की गई लाइनों के लिए लाइन नंबर एक ही रंग को टिप्पणियों के रूप में लागू होते हैं। – jimeh

+0

ऋण चिह्न को हटाने के लिए, संख्या के पूर्ण मूल्य प्राप्त करने के लिए बस 'abs' पर कॉल करें। यानी: '(संख्या-से-स्ट्रिंग (abs (- line-number my-linum-current-line-number))) – phils

+0

प्रश्न दो के लिए, मेरे कोड में एक चाल गायब थी: जब 'linum-format' एक फ़ंक्शन है , वापसी मूल्य स्वचालित रूप से लिनम चेहरे के साथ संपत्ति नहीं है। मैंने इसका ध्यान रखने के लिए ऊपर दिए गए कोड को अपडेट किया है। यदि आप चेहरे को आगे संशोधित करना चाहते हैं तो आप 'एम-एक्स कस्टमाइज़-ग्रुप आरईटी लिनम आरईटी' कर सकते हैं। – phils

4

देखो और linum-format चर।

लिनम-प्रारूप 'linum.el' में परिभाषित एक चर है।

स्वरूप प्रदर्शन लाइन नंबर के लिए इस्तेमाल किया:
इसका मान गतिशील

प्रलेखन है।
या तो चौड़ाई को आवश्यकतानुसार चौड़ाई को अनुकूलित करने के लिए "गतिशील" जैसे प्रारूप प्रारूप, या तर्क के रूप में लाइन नंबर के साथ कॉल किया गया फ़ंक्शन और उस पंक्ति पर दिखाए जाने वाले स्ट्रिंग का मूल्यांकन करना चाहिए।
'लिनम-पहले-संख्या-हुक' भी देखें।

+0

आह, मैंने पहले यह नहीं देखा था, कि मैं इसे लाइन पर दिखाए गए स्ट्रिंग को बनाने के लिए बस एक फ़ंक्शन दे सकता हूं ... अच्छी कॉल, मैं इस सप्ताह के अंत में अपना खुद का प्रयास करने का प्रयास कर सकता हूं। – Steve

9

मैं सिर्फ इस बात के लिए स्कॉट Jaderholm के कोड भर में आया, और इस सवाल को देखकर याद आया, तो मैं the relevant lines in his .emacs के लिए लिंक पोस्ट का फैसला किया।

अद्यतन: आप MELPA उपयोग कर रहे हैं (और आप होना चाहिए!), बस एम एक्स पैकेज से स्थापित आरईटी Linum-रिश्तेदार

+1

यह https://github.com/scottjad/linum-relativenumber –

+1

पर ले जाया गया है यह कार्यक्षमता प्रदान करने वाली सबसे पूर्ण और अद्यतित लाइब्रेरी वास्तव में [लिनम-रिश्तेदार] (http: //www.emacswiki) प्रतीत होती है। संगठन/emacs/linum-relative.el), जिसके लिए [Melpa] (http://melpa.milkbox.net/) एक स्नैपशॉट ईएलपीए पैकेज प्रदान करता है। – sanityinc

+0

@ सैनिटीकिन लिनम-रिश्तेदार पैकेज.एएल या एल-गेट के साथ मेरे लिए मेल्पा से स्थापित नहीं है। तुमने इससे काम कैसे लिया? –

5

एक संबंधित नोट पर, यदि आप केवल एक विशिष्ट लाइन के लिए स्थानांतरित करने के लिए देख रहे हैं, ace-jump-mode एक कमांड ace-jump-line-mode आप स्क्रीन पर दिखाई एक विशिष्ट लाइन के लिए सीधे जा सकते हैं प्रदान करता है। यह लाइनों के लिए संख्या के बजाय पत्र का उपयोग करता है, तथापि:

ace-jump-mode screenshot

संबंधित मुद्दे