दस्तावेज़ पूर्ण होने पर इमैक को अक्षम कैसे करें


11

Emacs के साथ एक bash स्क्रिप्ट फ़ाइल को संपादित करते समय, और <<<दूसरे <emacs में प्रवेश करने की कोशिश करते हुए , यहाँ एक डॉक्यूमेंट के लिए टेम्प्लेट डालें, जैसे निम्न उदाहरण में:

<<EOF

EOF

यह वांछित आउटपुट नहीं है, क्योंकि मैं एक शाब्दिक रूप से प्रवेश करूंगा <<<।

फिलहाल मैं प्रवेश करने का सहारा < < <लेता हूं, और फिर रिक्त स्थान हटा रहा हूं, लेकिन मैं इसे सीधे प्रवेश करने की अनुमति देना पसंद करता हूं।


2
ऐसा नहीं है कि मैं बहुत ज्यादा परवाह करता हूं, लेकिन एक टिप्पणी छोड़ना अच्छा होगा।
— 15

जवाबों:


12

वास्तव में टॉम के कस्टम my-disable-here-documentफ़ंक्शन को कुंजी को रिवाइंड करने की कोई आवश्यकता नहीं है । इस सुविधा को सक्षम और इसके साथ अक्षम किया जा सकता है sh-electric-here-document-mode:

(add-hook 'sh-mode-hook
          (lambda ()
            (sh-electric-here-document-mode -1)))

(इसके माध्यम से सक्रिय बफर के लिए भी टॉगल किया जा सकता है M-x sh-electric-here-document-mode।)


भी: sh-mode-hookमेरे लिए काम नहीं किया, लेकिन sh-set-shell-hookकिया।
— फेलिप लीमा

6

बाध्य <करने के लिए self-insert-commandपार्टी मोड में है और फिर इसे केवल चरित्र डाल देंगे।

डिफ़ॉल्ट रूप से यह sh-maybe-here-documentbash मोड में होता है और ऑटो-इंसर्शन करता है।

यहाँ कुंजी को रिबाउंड करने का एक तरीका है:

(add-hook 'sh-set-shell-hook 'my-disable-here-document)

(defun my-disable-here-document ()
  (local-set-key "<" 'self-insert-command))

क्या आप कृपया init फ़ाइल में सम्मिलित करने के बारे में कुछ और जानकारी दे सकते हैं? क्षमा करें, लेकिन मैं एक शुरुआती emacs उपयोगकर्ता हूं।
— 10

मैंने अपने उत्तर में एक सरल उदाहरण जोड़ा। यह हर तरह के खोल में स्वचालित सम्मिलन को अक्षम कर देता है, न केवल बैश, बल्कि समान रूप से यह है कि आप वैसे भी क्या चाहते हैं।
— टॉम

यह समाधान अब काम नहीं करता है (24.3 emacs पर परीक्षण), क्योंकि डिफ़ॉल्ट रूप <से बाध्य है self-insert-command।
— टी। वेरॉन

2

यदि एकमात्र कारण जिसे आप यहाँ-डॉक्टर व्यवहार को निष्क्रिय करना चाहते हैं , तो यह आपको यहाँ स्ट्रिंग- <<< को डालने से रोकता है , फिर C-<एक ऐसे फ़ंक्शन से बाइंड (insert "<<<")करना जिसमें काम होगा, और फिर भी ऑटो यहाँ-डॉक्टर टेम्पलेट को अनुमति देगा

(defun my-here-string() 
  "Insert <<< (eg. for a bash here-string)" 
  (interactive)
  (insert "<<<"))
(global-set-key (kbd  "C-<") 'my-here-string)

1
धन्यवाद, दिलचस्प समाधान, लेकिन मैं अभी भी @ टॉम के जवाब को पसंद करता हूं, क्योंकि मैं बैश स्क्रिप्ट फ़ाइल के लिए उस पूर्णता को गलत मानता हूं।
— enzotib

2

मैं शेल मोड में प्रवेश <<<करता हूं M-3<।


1

प्रकार < C-q < <


यह मेरे वर्कअराउंड से छोटा है, और शायद अन्य स्थितियों के लिए भी उपयोगी है, लेकिन वास्तव में ऐसा नहीं है जिसकी मुझे तलाश थी। वैसे भी धन्यवाद।
— enzotib

1

एक बार देखने के बाद: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el मैं इस समाधान के साथ आया हूं:

;; disable the automatic EOF generation in Shell Mode
(defvar sh-use-prefix nil
  "If non-nil when loading, `$' and `<' will be  C-c $  and  C-c < .")
(defvar sh-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map (if sh-use-prefix "\C-c<" "<")
      (local-set-key "<" 'self-insert-command))
   map)
  "Keymap used in Shell-Script mode.")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.