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


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.