So deaktivieren Sie Emacs hier Dokumentvervollständigung


11

Wenn Sie eine Bash-Skriptdatei mit Emacs bearbeiten und versuchen, sie einzugeben <<<, <fügen Sie beim zweiten Emacs eine Vorlage für ein Here-Dokument ein, wie im folgenden Beispiel:

<<EOF

EOF

Dies ist nicht die gewünschte Ausgabe, da ich ein Literal eingeben würde <<<.

Im Moment greife ich darauf zurück < < <, Leerzeichen einzugeben und dann zu löschen, aber ich ziehe es vor, sie direkt eingeben zu dürfen.


2
Nicht, dass es mich zu sehr interessiert, aber es wäre schön, einen Kommentar für eine Abwertung zu hinterlassen.
Enzotib

Antworten:


12

Es ist eigentlich nicht erforderlich, dass Toms benutzerdefinierte my-disable-here-documentFunktion die Tasten neu bindet. Diese Funktion kann aktiviert und deaktiviert werden mit sh-electric-here-document-mode:

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

(Es kann auch über auf den aktiven Puffer umgeschaltet werden M-x sh-electric-here-document-mode.)


Auch: sh-mode-hookhat bei mir nicht funktioniert, aber sh-set-shell-hookfunktioniert.
Felipe Lema

6

Binden <an self-insert-commandin der Bash - Modus und dann wird es nur den Charakter einfügen.

Standardmäßig ist es sh-maybe-here-documentim Bash-Modus gebunden und diese Funktion führt das automatische Einfügen durch.

Hier ist eine Möglichkeit, den Schlüssel zurückzuprallen:

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

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

Können Sie bitte weitere Informationen darüber geben, was genau in die Init-Datei eingefügt werden soll? Entschuldigung, aber ich bin ein Emacs-Anfänger.
Enzotib

Ich habe meiner Antwort ein einfaches Beispiel hinzugefügt. Es deaktiviert das automatische Einfügen in jede Art von Shell, nicht nur Bash, sondern wahrscheinlich auch das, was Sie wollen.
Tom

Diese Lösung funktioniert nicht mehr (getestet auf Emacs 24.3), da <sie self-insert-commandstandardmäßig gebunden ist .
T. Verron

2

Wenn der einzige Grund, warum Sie das Here-Doc- Verhalten deaktivieren möchten, darin besteht, dass Sie keine Here-Zeichenfolge <<< einfügen können , C-<funktioniert die Bindung an eine enthaltene Funktion (insert "<<<")und lässt die automatische Here-Doc- Vorlage weiterhin zu

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

1
Vielen Dank, interessante Lösung, aber ich bevorzuge immer noch die Antwort von @ Tom, da ich diese Vervollständigung für eine Bash-Skriptdatei für falsch halte.
Enzotib


1

Art < C-q < <


Es ist kürzer als meine Problemumgehung und möglicherweise auch für andere Situationen nützlich, aber nicht genau das, wonach ich gesucht habe. Trotzdem danke.
Enzotib

1

Nach einem Blick auf: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el habe ich diese Lösung gefunden:

;; 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.")
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.