emacs: स्क्रॉल / पेज अप / डाउन के बाद अंतिम स्थिति में कैसे लौटें?


14

जारी करने के बाद scroll-upया scroll-downemacs में, अपनी पिछली स्थिति में बिंदु वापस करने का एक त्वरित तरीका है (यह मानते हुए कि मैंने इसे मार्क रिंग में जोड़ना याद नहीं किया है)?

वैकल्पिक रूप से स्क्रॉलिंग व्यवहार को बदलने के लिए कोई रास्ता नहीं है (मार्क रिंग के साथ हस्तक्षेप किए बिना) ताकि स्क्रॉल करना फिर नीचे स्क्रॉल करना (या इसके विपरीत) अपनी मूल स्थिति पर बिंदु लौटाए? (उदाहरण। स्क्रॉल को बिंदु पर ले जाएं बिल्कुल x रेखाएं जहां x स्क्रीन की ऊंचाई है)

मैं अपने आप को emacs के आदी होने की प्रक्रिया में हूं और यह सबसे आम अभिशाप स्थितियों में से एक है: मैं अपने कोड का एक और हिस्सा देखने के लिए बिना किसी निशान को देखे अपनी रेखा को मार्क रिंग में जोड़ने के लिए स्क्रॉल करता हूं और फिर यह कोशिश करना दर्दनाक है कोड की लाइन को स्थानांतरित करने के लिए मैं काम कर रहा था। इस तरह, जब मैं एक तकनीकी समाधान के लिए पूछ रहा हूं, तो मुझे यह सुनने में भी दिलचस्पी होगी कि अनुभवी उपयोगकर्ता इस समस्या से कैसे बचें। क्या आपको बस एक निशान सेट करने के लिए याद रखने की आदत है, खिड़की को चारों ओर देखने के लिए विभाजित करें या कुछ अन्य पैटर्न का उपयोग करें?

धन्यवाद

जवाबों:


13
(setq scroll-preserve-screen-position t)

इस सेटिंग के साथ , यदि आप ऊपर और नीचे पेज करते हैं, तो कर्सर अपनी मूल लाइन पर वापस आ जाता है। यह Emacs संस्करण 23 या नए में अपने मूल कॉलम को भी बनाए रखता है।

आप पसंद कर सकते हैं या नहीं

(setq scroll-preserve-screen-position 'always)

जो हमेशा स्क्रॉल करते समय कर्सर की स्क्रीन स्थिति को संरक्षित करता है, बल्कि बफर में कर्सर की स्थिति को संरक्षित करने के बजाय यदि मूल स्थिति अभी भी दिखाई देती है।


2
मेरी तरफ से भी धन्यवाद! (, बहुत से!) वर्षों के लिए, मैंने स्क्रॉल करने से पहले "<>" टाइप किया है, बस वापस लौटने के लिए एक खोज लक्ष्य है।
JRobert

मेरे लिए यह कारण बनता है scroll-up-line(जो कि मैं अपने स्क्रॉल व्हील के साथ उपयोग करता हूं) कर्सर को स्क्रीन के ऊपर या नीचे हिट करने पर एक पात्र को आगे बढ़ने के लिए प्रेरित करता है।
asmeurer

@asmeurer मैं इसका निरीक्षण नहीं करता। आपके init फ़ाइल में कुछ अजीब या Emacs के आपके संस्करण में एक बग होना चाहिए।
गिल्स एसओ- बुराई को रोकना

हाँ, मुझे लगा कि मैंने यह पोस्ट करने के बाद। मैंने emacs.stackexchange.com/questions/12439/… पर एक नया प्रश्न खोला ।
asmeurer

मुझे लगता है कि यह होना चाहिए (setq scroll-preserve-screen-position 'always)। अन्यथा, C-v M-vवह बिंदु वापस नहीं डालता जहां आपने शुरू किया था। (दूसरा बिंदु स्थिति पहली स्क्रीनफुल पर दिखाई देती है इसलिए बिंदु वापस नहीं जाता है।)
विल्फ्रेड ह्यूजेस

6

जो मैंने अच्छी तरह से काम करने के लिए पाया है वह उपयोग कर रहा है goto-last-change.el, जो आपको उस स्थान पर वापस भेजता है जहां आपने पिछली बार एक संपादन किया था। मुझे बंधन पसंद है:

(require 'goto-last-change) ;; download this package and install in load-path
(global-set-key (kbd "C-x C-\\") 'goto-last-change)

2
समान रूप से, अतिरिक्त पैकेज की आवश्यकता के बिना: C-_ C-f C-_(पूर्ववत करें, स्थानांतरित करें, पूर्ववत करें)।
गिल्स एसओ- बुराई को रोकना '

1
@ गिल्स ट्रू, लेकिन फिर आपका पूर्ववत स्टैक सिर्फ दो और तत्वों द्वारा विकसित हुआ। :)
ट्रे जैक्सन

1

आपके प्रश्न के उत्तर में कि मैं आपके द्वारा बताई गई समस्या से कैसे बचता हूं (कोड में कहीं और देख रहा हूं और फिर उस बिंदु पर लौट रहा हूं जहां मैं काम कर रहा था ...

आमतौर पर, मैं स्क्रीन को विभाजित करूँगा जब मुझे कुछ समय के लिए कहीं और देखना होगा। फिर मैं मूल स्क्रीन पर वापस आ सकता हूं C-x o, के साथ अनसैपिट कर सकता C-x 1हूं और वापस सामान्य हो गया हूं।

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


0

यदि मैं केवल कुछ पंक्तियों को स्क्रॉल कर रहा हूं, जहां से मैं वर्तमान में हूं, तो मैं इसका उपयोग विंडो को बिना मूविंग पॉइंट को स्क्रॉल करने के लिए कर सकता हूं:

(defun scroll-in-place (scroll-up)
  "Scroll window up (or down) without moving point (if possible).

SCROLL-Up is non-nil to scroll up one line, nil to scroll down."
  (interactive)
  (let ((pos (point))
        (col (current-column))
        (up-or-down (if scroll-up 1 -1)))
    (scroll-up up-or-down)
    (if (pos-visible-in-window-p pos)
        (goto-char pos)
      (if (or (eq last-command 'next-line)
              (eq last-command 'previous-line))
          (move-to-column temporary-goal-column)
        (move-to-column col)
        (setq temporary-goal-column col))
      (setq this-command 'next-line))))

;;;; ------------------------------------------------------------------------
(defun scroll-up-in-place ()
  "Scroll window up without moving point (if possible)."
  (interactive)
  (scroll-in-place t))

;;;; ------------------------------------------------------------------------
(defun scroll-down-in-place ()
  "Scroll window up without moving point (if possible)."
  (interactive)
  (scroll-in-place nil))

(global-set-key (read-kbd-macro "M-<down>") 'scroll-up-in-place)
(global-set-key (read-kbd-macro "M-<up>") 'scroll-down-in-place)

यदि मैं किसी फ़ाइल के पूरी तरह से भिन्न खंड (या किसी भिन्न फ़ाइल में पूरी तरह से) पर जा रहा हूं, तो मैं कभी-कभी उपयोग करता हूं breadcrumbहालांकि बहुत सारे अन्य पैकेज हैं जो समान चीजें करते हैं।

यदि मुझे एक ही समय में कोड के दो क्षेत्रों को नेत्रहीन रूप से देखने की आवश्यकता है, तो मैं फ्रेम को क्षैतिज रूप से दो खिड़कियों में विभाजित कर दूंगा और जब मैं करूंगा तो दूसरी विंडो को छोड़ दूंगा।

ज्यादातर, हालांकि, मैं सिर्फ दो फ्रेम का उपयोग करता हूं, एक मेरा वर्तमान काम करने वाला फ्रेम है और दूसरा मेरा संदर्भ फ्रेम है, जिसका उपयोग उसी या अन्य फाइलों के आसपास कूदने के लिए किया जाता है।


यदि आप जो कुछ करना चाहते हैं, वह वर्तमान बिंदु के ऊपर या नीचे देखा जा सकता है, तो आप साइकिल चला सकते हैं C-l
asmeurer

0

पैकेज रिस्टोर पॉइन्ट वही करता है जो आपने वर्णित किया है, बॉक्स से बाहर।

यह जाँच करता है कि (विन्यास) आदेशों का एक सेट (डिफ़ॉल्ट, मार्क आदेश, स्क्रॉल और पेज-अप / डाउन) के द्वारा मार डाला गया और फिर आप से टकराने के द्वारा पिछले बिंदु (कर्सर) की स्थिति में वापस जाने के लिए अनुमति देता है keyboard-quit, आम तौर पर करने के लिए बाध्य C-gया ESC

डिस्क्लेमर: मैं इस पैकेज का लेखक हूं।

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