GNU Emacs में लाइन द्वारा लाइन स्क्रॉल कैसे करें?


87

इसे सरलता से कहने के लिए, मैं vim और अधिकांश अन्य संपादकों की तरह emacs में स्क्रॉलिंग प्राप्त करने की कोशिश कर रहा हूं; जब मैं उदाहरण के लिए कर रहा हूँ, नीचे / ऊपर से दो लाइनें हैं, और मैं नीचे प्रेस / ऊपर ( Ctrl- p, n, , ) यह केवल एक लाइन ऊपर या नीचे, नहीं आधी स्क्रीन चला जाता है।


5
मुझे यकीन है कि यह कभी तय नहीं होगा। पिछले 90 के दशक में यह एक कमी थी और यह 2010 में यहां टूट गई।
स्टीव कू

12
@ सेव कुओ: क्वैशिंग को कोसना - यह डिज़ाइन के अनुसार काम कर रहा है , लेकिन इसे एक साधारण सेटिंग के साथ (या "निश्चित") बदला जा सकता है।
टेडी

17
@ टेडी और यह "सरल सेटिंग" क्या है?
स्टीव कू

1
@ टेडी हाँ, यह क्या है?
स्कूटर

@Rook: वास्तव में मैं z.Emacs महसूस करने के लिए अधिक बार vim में उपयोग करने की सलाह दूंगा ;-) यह असामान्य हो सकता है, लेकिन यह वास्तव में लाइन IMHO द्वारा स्क्रॉलिंग लाइन की तुलना में अधिक उपयोगी है।
यू। विंडल

जवाबों:


51

EmacsWIki पर कुछ सुझाव देखें:

(सेटक स्क्रॉल-स्टेप १
      स्क्रॉल-रूढ़िवादी 10000)

3
यह देखा, वास्तव में - दोनों जवाब, तुम्हारा और jrockway है, लेकिन विकी पर दोनों की सिफारिश नहीं की जाती है। Unfortunatelly, उसके कारणों को स्पष्ट रूप से नहीं बताया गया है। इसलिए मैंने सवाल पोस्ट किया है, उम्मीद है कि किसी को ऐसी विधि मिले जो बिना खामियों के काम करे।
रूक

1
मैं यह नहीं देख सकता कि यह क्यों अनुशंसित नहीं है। मैं समान कॉन्फ़िगरेशन का उपयोग कर रहा हूं और यह काफी अच्छा काम कर रहा है। आपको और आश्वस्त करने के लिए, स्क्रॉल-स्टेप (अंतिम वाक्य पर ध्यान दें) का यह डॉक देखें: * पॉइंट ऑफ़ आउट होने पर विंडो को स्क्रॉल करने के लिए लाइनों की संख्या। यदि वह फ्रेम पर बिंदु को वापस लाने में विफल रहता है, तो इसके बजाय बिंदु केंद्रित है। यदि यह शून्य है, तो फ्रेम बंद होने के बाद बिंदु हमेशा केंद्रित रहता है। यदि आप स्क्रॉलिंग को हमेशा एक समय में एक पंक्ति बनाना चाहते हैं, तो आपको इसे सेट करने के बजाय एक बड़े मूल्य पर 'स्क्रॉल-रूढ़िवादी' सेट करना चाहिए
a0

हाँ, थोड़ा और इधर-उधर देखने पर मुझे विकी पर उस सावधान नोट को वापस करने के लिए ज्यादा कुछ दिखाई नहीं देता। उदाहरण के लिए, स्क्रॉल-स्टेप एक Google खोज के माध्यम से एकाधिक .emacs फ़ाइलों में काफी सामान्य प्रतीत होता है। शायद विकि लेखक emacs के पुराने संस्करण की बात कर रहा है?
आर्स

कभी कोई समस्या नहीं थी scroll-conservatively। इसके खिलाफ चेतावनी थोड़ी अजीब है - अगर यह समस्या का कारण बनता है, तो यह आपके init.el से लाइन को हटाने के लिए काफी आसान है!
dbr

1
@ars groups.google.com/group/gnu.emacs.help/browse_thread/thread/... Emacs <23.1 और बड़ी फ़ाइलों के साथ ऐसा है, तो यह कभी कभी बीच है, जो सबसे बड़ी समस्या की तरह प्रतीत नहीं होता है के लिए कर्सर कूद सकता है
dbr

51

यदि आप स्क्रीन को बिल्कुल सही स्थिति में लाना चाहते हैं, तो आप Ctrl-L का उपयोग कर सकते हैं।

  • डिफ़ॉल्ट रूप से यह स्क्रीन के बीच में वर्तमान रेखा को स्थित करता है।

  • ESC 0 Ctrl-L शीर्ष पर वर्तमान रेखा रखता है।


14
इसे गलत मत समझो, लेकिन क्या है कि लाइन द्वारा स्क्रॉलिंग लाइन के साथ क्या करना है? (यानी सवाल)
रुके

9
एक वैकल्पिक वर्कफ़्लो की पेशकश करना (जो लेखक की राय में) हाथ में उपकरण के साथ अधिक स्वाभाविक है, उचित है। लेकिन आपको इसे उस प्रभाव के अस्वीकरण के साथ पेश करना चाहिए, और समझाएं कि यदि संभव हो तो यह दृष्टिकोण "बेहतर" क्यों है।
dmckee --- पूर्व-संचालक

2
@dmckee - मैंने vim ... uhmm, एक लंबे समय का उपयोग किया है। इसके साथ बहुत अच्छा है। हालांकि, जब से मैं लिस्प के साथ कुछ कर रहा हूं, मैंने अपने आप को कम से कम फिर से emacs के साथ पकड़ पाने के लिए मजबूर करना शुरू कर दिया, और इस समय "वैकल्पिक" तरीका मेरे लिए बहुत अधिक है। ट्यूटोरियल पढ़ें, इसे जानें ... लेकिन, यह बहुत अजीब है, इमो। प्राकृतिक नहीं।
5:15

1
@ इदिगास: ज़रूर। यह उचित है, और आपको स्टारब्ले की सलाह लेने की आवश्यकता नहीं है। लेकिन मुझे लगता है कि इस तरह का उत्तर मददगार हो सकता है अगर यह अप-फ्रंट हो और इसमें सम्मोहक स्पष्टीकरण शामिल हो।
dmckee --- पूर्व-मध्यस्थ ने बिल्ली के बच्चे

1
हाँ, यह कीस्ट्रोक्स के एक जोड़े में काम करता है। (मैं Googled "कैसे लाइन द्वारा लाइन स्क्रॉल करने के लिए" केवल क्योंकि यह एक उपयोगी तरीका की तरह लग रहा था "के लिए कोड बनाने के लिए जहां मैं चाहता हूँ"।) धन्यवाद!
एननेल

42

मैं पार्टी के लिए थोड़ी देर हो चुकी हूँ, लेकिन अगर आप एक पैकेज को स्थापित करने से परहेज नहीं करते तो चिकनी-स्क्रॉलिंग ( GitHub , में भी उपलब्ध Melpa ) हो सकता है आप जो खोज रहे हैं - यह निश्चित रूप से मेरे लिए काम करता है।

एक बार इसे स्थापित करने के बाद आप अपने init.el में निम्नलिखित को पॉप कर सकते हैं:

(require 'smooth-scrolling)
(smooth-scrolling-mode 1)
(setq smooth-scroll-margin 5)

अंतिम पंक्ति वैकल्पिक है; यह इसके बजाय स्क्रीन किनारे के पास स्क्रॉल करना शुरू कर देता है, इसलिए आपको हमेशा बिंदु के चारों ओर थोड़ा संदर्भ मिला है। स्वाद के लिए समायोजित करें।


7
यह पढ़ते ही मैं रोने लगा। बहुत यकीन है कि यह सवाल का जवाब है।
एरिक ब्राउन

3
हां, Emacs की कोशिश करने वाले एक विम उपयोगकर्ता के रूप में यह वही है जो मैं देख रहा था।
जुआनजुक्स

मैंने इस सॉल्यूशन और स्क्रॉल-स्टेप सॉल्यूशन दोनों का इस्तेमाल किया, जब मैं नीचे से 6 वीं लाइन पर जाता हूं तो कॉम्बिनेशन आकर्षक होता है और नीचे दबाते हैं, यह एक लाइन स्क्रॉल करेगा, और ऊपर से एक ही।
Emad Elsaid

अफसोस की बात है, चिकनी-स्क्रॉलिंग अब काफी बार विफल हो जाती है जब आप अपनी फ़ाइल के इर्द-गिर्द कूद रहे होते हैं, जैसे, घटित-विधा या खोज: दोनों ही बिंदु ऑफ़-स्क्रीन ला सकते हैं और आपको अपना परिणाम प्रदर्शित करने के लिए CL पर हिट करना होगा।
एरिक नोल्स

27

मेरा समाधान एमैक की डिफ़ॉल्ट स्क्रॉलिंग को बदलना नहीं है, बल्कि मैक्रो से एक महत्वपूर्ण अनुक्रम कमांड बनाना है। इस तरह से आपके पास एक समय में एक पंक्ति को स्क्रॉल करने का एक सुविधाजनक तरीका है जब आप चाहते हैं। आदर्श नहीं है, लेकिन सुपर आसान है। यह बस ऐसा होता है कि एम- (↓) और एम- (are) उपलब्ध हैं, इसलिए मैंने इसका उपयोग किया है।

मैंने इस तरह से इसे किया। सबसे पहले, आपको एक पंक्ति स्क्रॉल, ऊपर और नीचे के लिए मैक्रो रिकॉर्ड करने की आवश्यकता है।

मैक्रो शुरू करो

C-x ( 

एक नीचे स्क्रॉल करें

C-u 1 C-v

स्थूल को रोकें

C-x )

स्क्रॉल अप के लिए, का उपयोग करें

C-u 1 M-v

आगे आपको मैक्रो का नाम देना होगा।

M-x name-last-kbd-macro

जैसे संकेत मिलने पर इसे नाम दें:

down-one-line

फिर उस कमांड के नाम के लिए एक महत्वपूर्ण अनुक्रम बाँधने के लिए बस निम्नलिखित का उपयोग करें:

M-x global-set-key

और संकेत देने पर, कुछ का उपयोग करें:

M-(down arrow)

फिर यह आपसे पूछेगा कि आप किस कमांड को बांधना चाहते हैं, और आपको यह नाम देना चाहिए जो आपने पहले आविष्कार किया था, उदाहरण के लिए, डाउन-वन-लाइन।

यहां मुझे यह जानकारी मिली है। आप अपने मैक्रो को .emacs फ़ाइल में जोड़ने के बारे में नीचे और अन्य जगहों पर भी निर्देश पा सकते हैं।

यहाँ मैक्रो डेफिनिशन स्पष्टीकरण के लिए

स्क्रॉलिंग को कैसे नियंत्रित किया जाए, इसके लिए यहां


22

मैं .emacs२००० से अपनी फाइल में इनका उपयोग कर रहा हूँ ।

(global-set-key (quote [M-down]) (quote View-scroll-line-forward))
(global-set-key (quote [M-up]) (quote View-scroll-line-backward)) 

इस तरह, मैं Emacs डिफ़ॉल्ट व्यवहार के साथ-साथ एक पंक्ति को एक समय में स्क्रॉल कर सकता हूं, जो कि मैं कर रहा हूं, उसके आधार पर।

यह काम कम से कम जीएनयू Emacs 22. मैं हाल ही में Emacs 24 करने के लिए उन्नत किया और पाया कि जब तक View-scroll-line-forwardऔर View-scroll-line-backwardअब उपलब्ध नहीं हैं। कुछ शिकार के बाद, मुझे पता चला कि स्क्रॉल-अप लाइन और स्क्रॉल-डाउन-लाइन काम। इसलिए यदि आप Emacs 24 का उपयोग कर रहे हैं, तो आप इसका उपयोग कर सकते हैं।

(global-set-key (quote [M-down]) (quote scroll-up-line))
(global-set-key (quote [M-up]) (quote scroll-down-line)) 

मैं ज्यादातर 23 Emacs को छोड़ देता हूं, इसलिए यदि वह संस्करण है जिसका आप उपयोग कर रहे हैं, तो आप उपरोक्त दोनों के साथ प्रयोग कर सकते हैं।

नोट: scroll-up-lineवास्तव में एक लाइन को नीचे स्क्रॉल करता है , क्योंकि बफर को एक लाइन ऊपर ले जाया जा रहा है।


धन्यवाद, यह काम करता है ... लेकिन मैंने एक और मुद्दा मारा है जो मैंने यहां के बारे में पूछा है: stackoverflow.com/questions/19256551/…
scorpiodawg

13

स्क्रॉलिंग ऑपरेशन करने के लिए मैं अपने एरो कीज़ को रिबंड करता हूं।

(global-set-key [up] (lambda () (interactive) (scroll-down 1)))
(global-set-key [down] (lambda () (interactive) (scroll-up 1)))

(global-set-key [left] (lambda () (interactive) (scroll-right tab-width t)))
(global-set-key [right] (lambda () (interactive) (scroll-left tab-width t)))

2
यह बिल्कुल वैसा नहीं है जैसा मैं देख रहा था। मैं स्क्रीन को स्क्रॉल करना नहीं चाहता (क्योंकि यह स्क्रॉल-लॉक सक्षम था), लेकिन स्क्रीन को "स्थानांतरित" करने के लिए ... ओह, ... बस नोटपैड इसे कैसे करता है :)
रूक

12

ऐसा करते हैं:

(global-set-key [M-up] (lambda () (interactive) (scroll-up 1)))
(global-set-key [M-down] (lambda () (interactive) (scroll-down 1)))

फिर मेटा कर्सर ऊपर जाता है और मेटा कर्सर नीचे चलता है।

QED। यह निश्चित नहीं है कि उपरोक्त सभी लोग धूम्रपान कर रहे थे!


या, जैसा कि मैंने अभी पोस्ट किया है, आप स्क्रॉल-अप-लाइन और स्क्रॉल-डाउन-लाइन का उपयोग कर सकते हैं।
राजेश जे आडवाणी

5

मेरे पास मेरी .emacs फ़ाइल में निम्न ctrl-up, ctrl-down स्क्रॉलिंग व्यवहार सक्षम करने के लिए है। मैं इसे मूसवेल के लिए भी उपयोग करता हूं।

(defun scroll-down-in-place (n)
  (interactive "p")
  (previous-line n)
  (scroll-down n))

(defun scroll-up-in-place (n)
  (interactive "p")
  (next-line n)
  (scroll-up n))

(global-set-key [mouse-4] 'scroll-down-in-place)
(global-set-key [mouse-5] 'scroll-up-in-place)
(global-set-key [C-up] 'scroll-down-in-place)
(global-set-key [C-down] 'scroll-up-in-place)

मैंने अभी यह कोशिश की है, लेकिन यह वह व्यवहार नहीं है जिसकी मुझे तलाश थी। यह आपको स्क्रीन पर अंतिम पंक्ति तक जाने में सक्षम बनाता है, लेकिन नीचे क्लिक करने पर यह "स्क्रीन को कई लाइनों द्वारा झटका देगा" ... पता नहीं कैसे इसे बेहतर समझा जाए।
रूक

मुझे माउस व्हील को मैप करने का विचार पसंद है। लेकिन अपने स्वयं के कार्यों को परिभाषित करने के बजाय बिल्ट-इन व्यू-स्क्रॉल-लाइन-फ़ॉरवर्ड और व्यू-स्क्रॉल-लाइन-बैकवर्ड (या नई स्क्रॉल-अप-लाइन और स्क्रॉल-डाउन-लाइन) काम नहीं करेगा?
राजेश जे आडवाणी

2

"विम" स्क्रॉल करने के लिए इसे अपनी .emacs फ़ाइल में रखें:

(defun next-line-and-recenter () (interactive) (next-line) (recenter))
(defun previous-line-and-recenter () (interactive) (previous-line) (recenter))
(global-set-key (kbd "C-n") 'next-line-and-recenter)
(global-set-key (kbd "C-p") 'previous-line-and-recenter)

@ यह मेरे लिए करता है
jjpikoov

2

चूंकि यह उपयोग करने के लिए कष्टप्रद हो सकता है M-up, M-downक्योंकि यह ओआरजी-मोड के साथ हस्तक्षेप करता है जो इन आदेशों को ओवरलोड करता है। इस समस्या से बचने के लिए मैं व्यक्तिगत रूप से उन कमांड्स का उपयोग करता हूं जो गठबंधन करते हैं M-page-up M-page-down"। यहां मैंने स्क्रॉल को 1 पंक्ति तक और नीचे परिभाषित किया।

;;;scroll by `number-of-lines' without the cursor attached to the screen
(global-set-key [M-prior] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-down number-of-lines)
                                                  (forward-line (- number-of-lines)))))
(global-set-key [M-next] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-up number-of-lines)
                                                  (forward-line number-of-lines))))

;;;scroll by `number-of-lines' with the cursor attached to the screen
(global-set-key [S-M-prior] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-down number-of-lines))))
(global-set-key [S-M-next] (lambda () (interactive) (let ((number-of-lines 1))
                                                  (scroll-up number-of-lines))))

1

M-x customize-variable scroll-conservatively

इसे 1 पर सेट करें।

हालांकि आप वास्तव में ऐसा नहीं करना चाहते हैं।


5
यह देखा, वास्तव में - दोनों जवाब, तुम्हारा और ars है, लेकिन विकी पर दोनों की सिफारिश नहीं की जाती है। Unfortunatelly, उसके कारणों को स्पष्ट रूप से नहीं बताया गया है। इसलिए मैंने सवाल पोस्ट किया है, उम्मीद है कि किसी को ऐसी विधि मिले जो बिना खामियों के काम करे।
रूक

3
अगर आप हमें नोब्स के लिए समझ सकते हैं तो यह आसान क्यों है, यह एक अच्छा विचार नहीं है।
डैनियल

एकमात्र कारण मैं सोच सकता हूं कि यह एक अच्छा विचार क्यों नहीं है कि स्क्रॉलिंग धीमी हो जाती है: आपको हमेशा एक पंक्ति में एक बार स्क्रॉल करना होगा, बजाय डिफ़ॉल्ट आधे स्क्रीन के। (मुझे लगता है?)
श्रीवत्सआर

1

यदि आप एक स्क्रॉल-प्रकार प्रभाव बनाने के लिए एक त्वरित तरीके की तलाश कर रहे हैं, तो अंदर C-nऔर C-lक्रमिक रूप से दर्ज करें जो कर्सर को नीचे ले जाता है और फिर इसे केंद्र करता है।


0

यदि आप .xsession में emacs शुरू करते हैं, तो मेरे मामले में स्क्रॉल-रूढ़िवादी रूप से 100+ सेट करने से काम नहीं चलेगा, और न ही स्क्रॉल-स्टेप 1. लेकिन यदि आप X के बाद emacs शुरू करते हैं, तो यह काम करता है।


0

यदि आपको माउस का उपयोग करने में कोई आपत्ति नहीं है और आपके पास एक स्क्रॉल व्हील है, तो आप चर माउस-व्हील-स्क्रॉल-राशि को या तो अनुकूलित कर सकते हैं:

Ch v माउस-व्हील-स्क्रॉल-राशि (अनुकूलित पर क्लिक करें, मान को "लाइनों के विशिष्ट # 1", एप्लाइंडवेव पर बदलें।)

या .emacs पंक्ति में जोड़ें: '(माउस-व्हील-स्क्रॉल-राशि' (1 (शिफ्ट)। 1) ((मेटा)) ((नियंत्रण)। टेक्स्ट-स्केल)।

Https://www.emacswiki.org/emacs/Scrolling पर बहुत सारी संभावनाएं सूचीबद्ध हैं

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