`फॉरवर्ड-वर्ड` पर एक शब्द की शुरुआत में बंद करो


17

मैं अक्सर एक लाइन पर एक शब्द की शुरुआत में बिंदु को स्थानांतरित करने के लिए forward-wordएकल के बाद के कई आक्रमणों का उपयोग करता हूं backward-word। मुझे लगता है कि मुझे कभी भी forward-wordवैम से अलग तरीके से इस्तेमाल करने की आदत नहीं है wऔर एमएसीएस के उपयोग के वर्षों के बाद भी मैं अंतर के लिए इस्तेमाल नहीं कर सकता।

क्या ऐसा कोई फंक्शन है जिसके बजाय मैं forward-wordशब्दों पर कूद नहीं सकता, लेकिन एक शब्द की शुरुआत में भी रुक जाता हूं ? क्या एक शब्द की शुरुआत में आगे बढ़ने के लिए अन्य रणनीतियां हैं जो आगे बढ़ने वाले बिंदु हैं जो बार-बार निष्पादित नहीं होते हैं forward-char?


आप (कुछ बिंदु पर) अपने आगे / पिछड़े शब्द / पैराग्राफ और संबंधित मार-शब्द कार्यों को लिखने में रुचि रख सकते हैं। निम्नलिखित कुछ कस्टम फ़ंक्शंस के तीन लिंक हैं जिनका मैं दैनिक आधार पर उपयोग करता हूं - व्यवहार कुछ शब्द प्रोसेसर के समान है जो मैंने वर्षों में उपयोग किए हैं: stackoverflow.com/a/20456861/2112489 | stackoverflow.com/q/18675201/2112489 | superuser.com/a/685604/206164
कानून सूची

जवाबों:


24

miscपैकेज (Emacs के साथ भेज दिया है) में निर्मित समारोह forward-to-wordहै, जो करता है कि मैं क्या लगता है कि आप चाहते हैं:

forward-to-word is an interactive compiled Lisp function in `misc.el'.

It is bound to M-f.

(forward-to-word ARG)

Move forward until encountering the beginning of a word.
With argument, do this that many times.

इसका उपयोग करने के लिए, पहले (require 'misc)अपनी कॉन्फिग फाइल में जोड़ें ।


धन्यवाद, यह उपयोगी है। दुर्भाग्य से, यह एक शब्द के अंत में भी नहीं रुकता है, हालांकि।
21

1
सच है, लेकिन न तो विम का है w। जहाँ तक मैं देख सकता हूँ, वहाँ लगभग पूर्ण विम-टू-इमेक मैपिंग है: w= forward-to-word; e= forward-word; b= backward-word; ge= backward-to-word। लेकिन मैं एक विशेषज्ञ विम उपयोगकर्ता नहीं हूं, इसलिए शायद कुछ सूक्ष्मता है जो मुझे याद आ रही है।
पदावनत

हे, आप वास्तव में सही हैं। मुझे लगता है कि जब भी मैं vim में हूँ w, eऔर bसिर्फ दूर धुंधला और मैं सिर्फ चारों ओर ले जाने। अजीब। मैं कुछ wबिंदुओं पर रुक गया था ! इसलिए, मैं आपके उत्तर को स्वीकार करूंगा, क्योंकि यह मेरे प्रश्न पर सटीक बैठता है :)
rekado

4

आप नीचे दिए गए फ़ंक्शन को बांध सकते हैं M-fऔर मूल forward-wordको बाइंड कर सकते हैं M-F। यह फ़ंक्शन केवल लेता है argऔर इसे forward-wordफ़ंक्शन पर भेजता है । इसलिए सार्वभौमिक तर्क मूल कार्य के साथ ही ठीक काम करेंगे।

(defun modi/forward-word-begin (arg)
  "Move forward a word and end up with the point being at the beginning of the
next word.  Move point forward ARG words (backward if ARG is negative).
If ARG is omitted or nil, move point forward one word."
  (interactive "p")
  (forward-word arg)
  (forward-word 1)
  (backward-word 1))

शब्द का सावधानी हालांकि कि उपरोक्त कार्य हमेशा सही काम नहीं कर सकता है ; यह बहुत हद तक इस बात पर निर्भर करता है कि बिंदु पहले से ही किसी शब्द की शुरुआत पर है या नहीं।


यहाँ ऊपर को लागू करने का एक और तरीका है जहाँ शब्द सीमा सिंटैक्स तालिका के अनुसार नहीं है लेकिन कड़ाई से व्हाट्सएप पृथक्करण पर है:

(defun modi/forward-word-begin (arg)
  "Move forward ARG (defaults to 1) number of words.
Here 'words' are defined as characters separated by whitespace."
  (interactive "p")
  (dotimes (_ arg)
    (forward-whitespace 1)))

इस विचार के लिए श्रेय @glucas को जाता है।


1

सही 'फॉरवर्ड / बैकवर्ड-वर्ड' कार्यों के लिए एक लंबी और दर्दनाक खोज के बाद मुझे निम्नलिखित मिला जिसके साथ मैं अब बहुत खुश हूँ:

(progn
  (defun boundary ()
    (and      (= (char-syntax (char-after))  ?w)
         (not (= (char-syntax (char-before)) ?w))))
  (defun my-forward-word ()
    (interactive) 
    (while (progn (forward-char)  (not (boundary)))))
  (defun my-backward-word ()
    (interactive) 
    (while (progn (backward-char) (not (boundary)))))
  (global-set-key [M-right] 'my-forward-word)
  (global-set-key [M-left]  'my-backward-word)
  )

0

यदि आप उपयोग करने के लिए तैयार हैं evil, तो wसामान्य स्थिति के लिए बाध्य है evil-forward-word-begin, जो आपके बाद की विम-स्टाइल कार्यक्षमता है।


मैं evilएक लंबे समय से पहले उपयोग करता था, लेकिन थोड़ी देर के बाद मैं god-modeइसके बजाय Emacs बाइंडिंग का उपयोग करता हूं और नियमित करता हूं ।
रेकाडो

0

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

जैसा कि आप उल्लेख करते हैं, चाल दो शब्दों को आगे बढ़ाने के लिए है, फिर एक शब्द पीछे की तरफ।

निम्नलिखित को ट्रिक करना चाहिए और सब मोड जैसे अन्य मोड का सम्मान करना चाहिए।

(define-key global-map (kbd  "M-f")
  (lambda ()
    (interactive)
    (forward-word)
    (forward-word)
    (backward-word)))

यह /emacs//a/4272/508 का अल्पविकसित संस्करण है जो कुछ मामलों को कवर नहीं करता है, लेकिन समझने में आसान है।

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