2013-07-30 5 views
7

मैं कैसे कॉन्फ़िगर कर सकते हैं Emacs अन्य आधुनिक संपादक के रूप में एक ही तरीके से काम करने के लिए जहां Alt दबाने हटाना + डी या Alt + बैकस्पेस से हटाता है आसन्न व्हाइटस्पेस या एक शब्द ? डिफ़ॉल्ट रूप से, emacs हमेशा एक शब्द हटा देता है।Emacs: व्हाइटस्पेस या एक शब्द

+0

मैं यह पता लगाने की कोशिश कर रहा हूं कि आपने इन हॉटकी का उल्लेख कब किया था ... मैंने वास्तव में आपके द्वारा वर्णित व्यवहार का सामना नहीं किया है। अधिकांश चीजें जो मैंने अभी कोशिश की है, या तो कुछ भी नहीं, या कुछ मनमाने ढंग से असंबंधित, पूरी लाइन को हटाने या दस्तावेज़ खोलने के इतिहास को नेविगेट करने के रूप में। इसलिए, मुझे वास्तव में पता नहीं है कि आपके मन में किस प्रकार का सफेद स्थान हटाना था। क्या यह '' एम- \ 'की तरह है? या इसे केवल बिंदु के पहले/बाद में हटा देना चाहिए? –

+0

इसके अलावा: http://www.emacswiki.org/emacs/DeletingWhitespace यहां सभी प्रकार के व्हाइटस्पेस हटाने के लिए उपयोगकर्ता द्वारा सबमिट किए गए कोड का एक बड़ा संग्रह है। –

+0

@wvxvw क्षमा करें यह Alt कुंजी होना चाहिए। ग्रहण, दृश्य स्टूडियो और उत्कृष्ट पाठ जैसे संपादक। – woodings

उत्तर

4

यह संभवतः पहले हल किया गया है, लेकिन कोड की तलाश करने के बजाय, हम अपना खुद का लिख ​​सकते हैं। इतना मज़ा!

इस तरह मैं इसे करूँगा, उम्मीद है कि यह मदद करता है।

(defun kill-whitespace-or-word() 
    (interactive) 
    (if (looking-at "[ \t\n]") 
     (let ((p (point))) 
     (re-search-forward "[^ \t\n]" nil :no-error) 
     (backward-char) 
     (kill-region p (point))) 
    (kill-word 1))) 

एक कुंजी के लिए यह बाँध:

(global-set-key (kbd "M-d") 'kill-whitespace-or-word) 
+0

मैं ज्यादातर एक हत्या-सफेद जगह या शब्द-पिछड़े कार्यक्षमता की तलाश में हूं। शब्दों को पीछे की ओर हटाएं लेकिन अधिकतर \ n पर रोकें। मुझे लगता है कि इस कोड को इसके लिए अनुकूलित किया जा सकता है, लेकिन मैं इसे समझने के लिए elisp पर बहुत अनजान हूं:/ – mtourne

1

आप एक CC-मोड आधारित बफर उपयोग कर रहे हैं, तो आप शायद Hungry Delete Mode नाबालिग मोड के लिए देख रहे हैं।

अंतर का एहसास दिलाने के लिएडेल और सी-सीकई स्थानों में DELETE प्रयास करें सी सी।

यदि आप जिस तरह से काम करते हैं, तो आप M-x c-toggle-hungry-state कर मानक कुंजी के लिए काम करने के लिए भुखमरी हटाना टॉगल कर सकते हैं या भूख हटाने के कार्यों को अपने पसंदीदा बाध्यकारी में दोबारा जोड़ सकते हैं।

तुम अब भी लगता है कि आप आगे क्या करना शब्द या खाली स्थान के मारने के एक प्रमुख पिगीबैक करने की जरूरत है, तो आप c-hungry-delete-forward के लिए इसी तरह कुछ कर सकते हैं, या सिर्फ अस्थायी रूप से c-delete-function rebind और इसे कहते हैं।

(defun c-hungry-delete-forward-word() 
    "Delete the following word or all following whitespace 
up to the next non-whitespace character. 
See also \\[c-hungry-delete-backwards]." 
    (interactive) 
    (let ((c-delete-function (function kill-word))) 
    (c-hungry-delete-forward))) 

अधिक जानकारी के लिए जानकारी पृष्ठ (ccmode) Hungry WS Deletion देखें।

9

Emacs का उपयोग करने के कुछ समय के दौरान मैंने पाया कि भले ही मैं मूल कार्यक्षमता को बदल सकता हूं, यह आमतौर पर दक्षता के मामले में अधिक भुगतान नहीं करता है। असल में, मैंने इसे कई बार करने के बाद, मुझे खेद हुआ और इसे कमजोर कर दिया। यह हर समय सच नहीं है, कुछ कीबाइंडिंग वास्तव में असहज हैं या शायद ही कभी उपयोगी हैं, लेकिन मुझे नहीं लगता कि यह शब्द है कि शब्द कैसे काम करता है। असल में, मुझे अभी एहसास हुआ कि: मैंने एक्लिप्स में कीबाइंडिंग का प्रयास किया है, लेकिन मैं इसे हमेशा के लिए एमाक्स-शैली केबिंगिंग्स के साथ उपयोग कर रहा हूं ...

वैसे भी, जैसा कि मैंने अभी कहा था, इससे पहले कि आप "फिक्सिंग" कर रहे हों

  1. एम छठे वेतन आयोग शब्दों के बीच अंतरिक्ष कम कर देता है सिर्फ एक अंतरिक्ष: "उस कार्यक्षमता, यकीन है कि यह वास्तव में टूट गया है :) मैं अपने आप को समारोह की तरह आप का वर्णन की आवश्यकता होगी, कभी नहीं लगता है, और शायद यहाँ क्यों है बनाना । यदि मैं शब्दों के बीच था तो मैं यही उपयोग करता था और मैं शब्दों को अलग करने के लिए अतिरिक्त स्थान को हटाना चाहता था।

  2. एम- \ सभी क्षैतिज स्थान हटा देता है। यह अंतरिक्ष से अलग दो शब्दों में शामिल हो जाएगा।

  3. क्या आप प्राप्त करने की कोशिश कर रहे हैं "विरल" स्वरूपण, किसी तरह का है के रूप में हैं:


int foo   = 42; 
unsigned int bar = 43; 

तो वहाँ एम एक्सalign-regexp कि क्या करना है।

  1. मैं बस, whitepsace की एक) लंबे फलस्वरूप रन के लिए जब तक यह खरोज है, और मामले में यह खरोज है कभी नहीं, टैब आमतौर पर यह बेहतर संभालती है। बी) यहां तक ​​कि यदि व्हाइटस्पेस के लंबे परिणामस्वरूप रन हैं, तो मैं एक समय में एक चरित्र द्वारा इस बिंदु को बहुत ही कम स्थानांतरित करता हूं, इसलिए ऐसी स्थिति के बारे में सोचना मुश्किल है जहां मुझे कई सफेद जगहों से घिरा हुआ बिंदु मिल जाएगा। कलाकार मोड, या डॉट आरेख जैसे चीजें दिमाग में आती हैं, लेकिन यह कोड संपादन के दौरान नहीं होती है।

  2. अंत में, यदि आप के लिए, ठीक है, सिर्फ एक मनमाना पाठ फ़ाइल को संपादित मान लीजिए कोशिश कर रहे हैं और आप शब्दों के बीच जोड़ सकते हैं या क्षैतिज स्थान निकालना चाहते हैं ... फिर, वहाँ एमएक्सalign-regexp करने के लिए है कि, या आप आयत पर चलने वाले आदेशों का उपयोग कर सकते हैं, अगर उस समय कई रेखाएं हैं। खैर, Emacs विज्ञापन टैब को भी पहचानेंगे और जब आप टैब पर हिट करते हैं, तो बिंदु से पहले अंतिम पंक्ति से मिलान करने के लिए टेक्स्ट को संरेखित करने का प्रयास करेंगे।

अंत में, यदि किसी कारण से मैं नहीं जान सकता :) मैं वास्तव में वास्तव में आप क्या वर्णन करने के लिए की जरूरत है, तो मैं यह इतना पसंद करते हैं चाहते हैं: कश्मीरएम \बैकस्पेस (यह बजाय "कश्मीर" के किसी भी अन्य महत्वपूर्ण हो सकता है - यह सिर्फ सही अपनी अंगुली के नीचे है, इसलिए इसे टाइप करने के लिए :) या तेज है, अगर मैं इसके बारे में सोचने के लिए आलसी हूँ: एम छठे वेतन आयोगम्युचुअल फंडMbसीडब्ल्यू - शायद बहुत कुछ लगता है, लेकिन ये वे आदेश हैं जिन्हें आप चाहते हैं एलडी वैसे भी हर समय उपयोग कर रहे हैं, इसलिए यह आपको गति के मामले में बाधा नहीं डालता है।

7
(defvar movement-syntax-table 
    (let ((st (make-syntax-table))) 
    ;; ` default = punctuation 
    ;; ' default = punctuation 
    ;; , default = punctuation 
    ;; ; default = punctuation 
    (modify-syntax-entry ?{ "." st) ;; { = punctuation 
    (modify-syntax-entry ?} "." st) ;; } = punctuation 
    (modify-syntax-entry ?\" "." st) ;; " = punctuation 
    (modify-syntax-entry ?\\ "_" st) ;; \ = symbol 
    (modify-syntax-entry ?\$ "_" st) ;; $ = symbol 
    (modify-syntax-entry ?\% "_" st) ;; % = symbol 
    st) 
    "Syntax table used while executing custom movement functions.") 

(defun delete-word-or-whitespace (&optional arg) 
"http://stackoverflow.com/a/20456861/2112489" 
(interactive "P") 
    (with-syntax-table movement-syntax-table 
    (let* (
     beg 
     end 
     (word-regexp "\\sw") 
     (punctuation-regexp "\\s.") 
     (symbol-regexp "\\s_\\|\\s(\\|\\s)")) 
     (cond 
     ;; Condition # 1 
     ;; right of cursor = word or punctuation or symbol 
     ((or 
      (save-excursion (< 0 (skip-syntax-forward "w"))) 
      (save-excursion (< 0 (skip-syntax-forward "."))) 
      (save-excursion (< 0 (skip-syntax-forward "_()")))) 
      ;; Condition #1 -- Step 1 of 2 
      (cond 
      ;; right of cursor = word 
      ((save-excursion (< 0 (skip-syntax-forward "w"))) 
       (skip-syntax-forward "w") 
       (setq end (point)) 
       (while (looking-back word-regexp) 
       (backward-char)) 
       (setq beg (point)) 
       (delete-region beg end)) 
      ;; right of cursor = punctuation 
      ((save-excursion (< 0 (skip-syntax-forward "."))) 
       (skip-syntax-forward ".") 
       (setq end (point)) 
       (while (looking-back punctuation-regexp) 
       (backward-char)) 
       (setq beg (point)) 
       (delete-region beg end)) 
      ;; right of cursor = symbol 
      ((save-excursion (< 0 (skip-syntax-forward "_()"))) 
       (skip-syntax-forward "_()") 
       (setq end (point)) 
       (while (looking-back symbol-regexp) 
       (backward-char)) 
       (setq beg (point)) 
       (delete-region beg end))) 
      ;; Condition #1 -- Step 2 of 2 
      (cond 
      ;; right of cursor = whitespace 
      ;; left of cursor = not word/not symbol/not punctuation = whitespace or bol 
      ((and 
       (save-excursion (< 0 (skip-chars-forward "\s\t"))) 
       (not (save-excursion (> 0 (skip-syntax-backward "w")))) 
       (not (save-excursion (> 0 (skip-syntax-backward ".")))) 
       (not (save-excursion (> 0 (skip-syntax-backward "_()"))))) 
       (setq beg (point)) 
       (skip-chars-forward "\s\t") 
       (setq end (point)) 
       (delete-region beg end)) 
      ;; right of cursor = whitespace 
      ;; left of cursor = word or symbol or punctuation 
      ((and 
       (save-excursion (< 0 (skip-chars-forward "\s\t"))) 
       (or 
        (save-excursion (> 0 (skip-syntax-backward "w"))) 
        (save-excursion (> 0 (skip-syntax-backward "."))) 
        (save-excursion (> 0 (skip-syntax-backward "_()"))))) 
       (fixup-whitespace)))) 
     ;; Condition # 2 
     ;; right of cursor = whitespace 
     ;; left of cursor = bol | left of cursor = whitespace | right of cursor = whitespace + eol 
     ((and 
      (save-excursion (< 0 (skip-chars-forward "\s\t"))) 
      (or 
       (bolp) 
       (save-excursion (> 0 (skip-chars-backward "\s\t"))) 
       (save-excursion (< 0 (skip-chars-forward "\s\t")) (eolp)))) 
      (setq beg (point)) 
      (skip-chars-forward "\s\t") 
      (setq end (point)) 
      (delete-region beg end)) 
     ;; Condition # 3 
     ;; right of cursor = whitespace or eol 
     ;; left of cursor = word or symbol or punctuation 
     ;; not bol + word or symbol or punctuation 
     ;; not bol + whitespace + word or symbol or punctuation 
     ((and 
      (or (save-excursion (< 0 (skip-chars-forward "\s\t"))) (eolp)) 
      (or 
       (save-excursion (> 0 (skip-syntax-backward "w"))) 
       (save-excursion (> 0 (skip-syntax-backward "."))) 
       (save-excursion (> 0 (skip-syntax-backward "_()")))) 
      (not (save-excursion (> 0 (skip-syntax-backward "w")) (bolp))) 
      (not (save-excursion (> 0 (skip-syntax-backward ".")) (bolp))) 
      (not (save-excursion (> 0 (skip-syntax-backward "_()")) (bolp))) 
      (not (save-excursion (and (> 0 (skip-syntax-backward "w")) (> 0 (skip-chars-backward "\s\t")) (bolp)))) 
      (not (save-excursion (and (> 0 (skip-syntax-backward ".")) (> 0 (skip-chars-backward "\s\t")) (bolp)))) 
      (not (save-excursion (and (> 0 (skip-syntax-backward "_()")) (> 0 (skip-chars-backward "\s\t")) (bolp))))) 
      (setq end (point)) 
      (cond 
      ((save-excursion (> 0 (skip-syntax-backward "w"))) 
       (while (looking-back word-regexp) 
       (backward-char))) 
      ((save-excursion (> 0 (skip-syntax-backward "."))) 
       (while (looking-back punctuation-regexp) 
       (backward-char))) 
      ((save-excursion (> 0 (skip-syntax-backward "_()"))) 
       (while (looking-back symbol-regexp) 
       (backward-char)))) 
      (setq beg (point)) 
      (when (save-excursion (> 0 (skip-chars-backward "\s\t"))) 
      (skip-chars-backward "\s\t") 
      (setq beg (point))) 
      (delete-region beg end) 
      (skip-chars-forward "\s\t")) 
     ;; Condition # 4 
     ;; not bol = eol 
     ;; left of cursor = bol + word or symbol or punctuation | bol + whitespace + word or symbol or punctuation 
     ((and 
      (not (and (bolp) (eolp))) 
      (or 
       (save-excursion (> 0 (skip-syntax-backward "w")) (bolp)) 
       (save-excursion (> 0 (skip-syntax-backward ".")) (bolp)) 
       (save-excursion (> 0 (skip-syntax-backward "_()")) (bolp)) 
       (save-excursion (and (> 0 (skip-syntax-backward "w")) (> 0 (skip-chars-backward "\s\t")) (bolp))) 
       (save-excursion (and (> 0 (skip-syntax-backward ".")) (> 0 (skip-chars-backward "\s\t")) (bolp))) 
       (save-excursion (and (> 0 (skip-syntax-backward "_()")) (> 0 (skip-chars-backward "\s\t")) (bolp))))) 
      (skip-chars-forward "\s\t") 
      (setq end (point)) 
      (setq beg (point-at-bol)) 
      (delete-region beg end)) 
     ;; Condition # 5 
     ;; point = eol 
     ;; not an empty line 
     ;; whitespace to the left of eol 
     ((and 
      (not (and (bolp) (eolp))) 
      (eolp) 
      (save-excursion (> 0 (skip-chars-backward "\s\t")))) 
      (setq end (point)) 
      (skip-chars-backward "\s\t") 
      (setq beg (point)) 
      (delete-region beg end)) 
     ;; Condition # 6 
     ;; point = not eob 
     ;; point = bolp and eolp 
     ;; universal argument = C-u = '(4) 
     ((and 
      (not (eobp)) 
      (and (bolp) (eolp)) 
      (equal arg '(4))) 
      (delete-forward-char 1)))))) 
+0

मुझे सामान्य रूप से कार्य पसंद है, लेकिन मैंने पाया कि यह काफी 'सार्वभौमिक' नहीं था। Ie 1) एक बार जब आप किसी लाइन की भिखारी को हटा देते हैं, तो यह पिछली रेखा को हटाने के लिए चारों ओर लपेटता नहीं है, यह सिर्फ –

+0

'रोकता है' और यदि आपके पास सफेद रिक्त स्थान के पीछे एक रेखा है, तो यह अक्षर को हटाने शुरू नहीं करता है सब? –

+0

@ लियो उफिमत्सेव - मैंने लाइन के अंत में व्हाइटस्पेस से निपटने के लिए एक शर्त जोड़ा। जब बिंदु रेखा के अंत में होती है और सफेद जगह बाईं ओर होती है, तो बाईं ओर सभी सफेद जगह हटा दें। यह एकमात्र ऐसी स्थिति है जहां बाईं ओर व्हाइटस्पेस हटा दिया जाता है। इस समारोह को बेहतर बनाने में मेरी सहायता करने के लिए धन्यवाद। मैं इस बारे में कुछ विचार देना चाहता हूं कि वर्तमान पैराग्राफ हटा दिए जाने के बाद फ़ंक्शन का दायरा आगे या पीछे की रेखाओं को हटाने के लिए बढ़ाया जाना चाहिए या नहीं। कारण मैं संकोच करता हूं कि मेरे समेत कई उपयोगकर्ता कभी-कभी समारोह को दोहराने के साथ अति उत्साही हो जाते हैं। – lawlist

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