2012-05-04 51 views
5

मैंने \ वर्ण को लेटेक्स-मोड में एक शब्द घटक के रूप में व्यवहार करने के लिए परिभाषित किया है, और मैं परिणामों से बहुत खुश हूं। मुझे परेशान करने वाली एकमात्र चीज यह है कि \alpha\beta जैसे अनुक्रम को एक शब्द के रूप में माना जाता है (जो निश्चित रूप से अपेक्षित व्यवहार है)।किसी चरित्र को शब्द सीमा के रूप में परिभाषित करें

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

स्पष्टता के लिए, यहाँ एक उदाहरण है:

\alpha\beta 
^  ^
1   2 

बिंदु 1 पर है और मैं M-d दबाते हैं, स्ट्रिंग "\ अल्फा" को मार डाला जाना चाहिए। यदि बिंदु 2 पर है और मैं M-<backspace> दबाता हूं, तो स्ट्रिंग "\ beta" को मारा जाना चाहिए।

मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

3

एक और सोचा:
आपका आवश्यकता बहुत क्या subword-mode CamelCase लिए प्रदान करता है की तरह है।

आप उप-मोड के व्यवहार को कस्टमाइज़ नहीं कर सकते हैं - regexps हार्ड-कोडेड हैं - लेकिन आप निश्चित रूप से उस लाइब्रेरी की प्रतिलिपि बना सकते हैं और इसे अपने उद्देश्यों के लिए संशोधित कर सकते हैं।

एम एक्सfind-libraryआरईटीsubwordआरईटी

कि शायद एक बहुत मजबूत समाधान होगा।

संपादित करें: सुझाव के रूप में, टिप्पणियों से अद्यतन: (जब तक

रिकॉर्ड के लिए, [[:upper:]] के प्रत्येक उदाहरण बदलते [\\\\[:upper:]] के कार्यों subword-forward-internal और subword-backward-internal subword.el महान =) काम करता है अंदर में जैसा कि "\" को "डब्ल्यू" वाक्यविन्यास के रूप में परिभाषित किया गया है)।

व्यक्तिगत तौर पर मैं तुलना में यह सीधे संपादित, पुस्तकालय की एक प्रतिलिपि बनाने के लिए और अधिक इच्छुक हो जाएगा मौजूदा पुस्तकालय थोड़ा और सामान्य प्रयोजन, जिसके लिए सरल समाधान के लिए लग रहे हैं बनाने के उद्देश्य के लिए है जब तक कि उन regexps को चर में ले जाएं - जिसके बाद इस तरह के उद्देश्य के लिए बफर-स्थानीय संशोधित संस्करणों के लिए यह छोटा होगा।

संपादित करें 2: Emacs 24.3 के रूप में (वर्तमान में एक release candidate), subword मोड इस नई subword-forward-regexp और subword-backward-regexp चर (सरल संशोधन के लिए) के साथ की सुविधा है, और subword-forward-function और subword-backward-function चर (और अधिक जटिल संशोधन के लिए)।

वांछित मूल्यों के साथ लेटेक्स-मोड में उन regexp चर बफर-स्थानीय बनाकर, आप केवल उपशब्द-मोड का उपयोग कर सकते हैं।

+0

हाँ, मैं सोच रहा हूं कि क्या उपशब्द मोड किसी भी मदद का हो सकता है। मैं regexps की जांच करेंगे। – Malabarba

+0

दरअसल, अगर '\\' को अपरकेस के रूप में माना जा सकता है, तो _subword-mode_ मेरे लिए बाकी करेगा। मुझे लगता है कि * सिंटेक्स गुण * में कॉन्फ़िगर किया गया है, लेकिन मुझे अभी तक यकीन नहीं है। – Malabarba

+0

अच्छा विचार है, लेकिन यह मुझे लगता है जैसे कि आपके निचले-केस संस्करण को निर्दिष्ट किए बिना ऊपरी-केस चरित्र नहीं हो सकता है? (मैं '(एलिसिप) स्ट्रिंग्स एंड कैरेक्टर 'के तहत' केस टेबल्स 'और' केस कनवर्ज़न 'को देख रहा हूं, साथ ही' [: upper:]' और '[: lower:] 'परिभाषाओं में' elisp) चार कक्षाएं।) – phils

2

आप इस का उपयोग करते हुए वाक्य रचना पाठ गुण लागू करने के लिए सक्षम होना चाहिए:

एम:(info "(elisp) Syntax Properties")आरईटी

संपादित करें: वास्तव में, मैं नहीं यकीन है कि अगर आप ठीक कर सकता है कर रहा हूँ इस?

निम्नलिखित (जो केवल प्रयोग है) करीब है, लेकिन M-<backspace> 2 पर केवल "बीटा" हटा देगा और पहले "\" नहीं होगा।

मुझे लगता है कि आप backward-kill-word को उस फ़ंक्शन में रीमेप कर सकते हैं जो पिछले "\" के लिए चेक किया गया था और साथ ही उसे मार डाला था। काफी हैकी, लेकिन अगर क्लीनर समाधान नहीं है तो शायद यह चाल चल जाएगा।

मैंने पहले इस कार्यक्षमता के साथ नहीं खेला है; शायद कोई और स्पष्टीकरण दे सकता है।

(modify-syntax-entry ?\\ "w") 
(setq parse-sexp-lookup-properties t) 
(setq syntax-propertize-function 'my-propertize-syntax) 
(defun my-propertize-syntax (start end) 
    "Set custom syntax properties." 
    (save-excursion 
    (goto-char start) 
    (while (re-search-forward "\\w\\\\" end t) 
     (put-text-property 
     (1- (point)) (point) 'syntax-table (cons "." ?\\))))) 
संबंधित मुद्दे