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.