Comment désactiver emacs ici l'achèvement du document


11

Lors de la modification d'un fichier de script bash avec emacs et de la tentative de saisie <<<, au deuxième <emacs, insérez un modèle pour un document ici, comme dans l'exemple suivant:

<<EOF

EOF

Ce n'est pas la sortie souhaitée, car j'entrerais un littéral <<<.

Pour le moment, j'ai recours à l'entrée < < <, puis à la suppression d'espaces, mais je préfère être autorisé à y entrer directement.


2
Pas que je m'en soucie trop, mais ce serait bien de laisser un commentaire pour un downvote.
— enzotib

Réponses:


12

Il n'y a en fait pas besoin de la my-disable-here-documentfonction personnalisée de Tom pour relier les touches. Cette fonctionnalité peut être activée et désactivée avec sh-electric-here-document-mode:

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

(Il peut également être basculé pour le tampon actif via M-x sh-electric-here-document-mode.)


Aussi: sh-mode-hookn'a pas fonctionné pour moi, mais sh-set-shell-hooka fonctionné.
— Felipe Lema

6

Liez <à self-insert-commanden mode bash, puis il n'insérera que le caractère.

Par défaut, il est lié sh-maybe-here-documenten mode bash et cette fonction effectue l'insertion automatique.

Voici un moyen de rebondir la clé:

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

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

Pouvez-vous donner plus d'informations sur ce qu'il faut insérer exactement dans le fichier init? Désolé, mais je suis un utilisateur débutant d'emacs.
— enzotib

J'ai ajouté un exemple simple à ma réponse. Il désactive l'insertion automatique dans tous les types de shell, pas seulement bash, mais c'est probablement ce que vous voulez de toute façon.
— Tom

Cette solution ne fonctionne plus (testée sur emacs 24.3), car elle <est liée self-insert-commandpar défaut.
— T. Verron

2

Si la seule raison pour laquelle vous souhaitez désactiver le comportement ici-doc est qu'il vous empêche d'insérer une chaîne ici <<<, alors la liaison C-<à une fonction qui contient (insert "<<<")fonctionnera et autorisera toujours le modèle auto ici-doc

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

1
Merci, solution intéressante, mais je préfère toujours la réponse de @ Tom, car je considère que la complétion est incorrecte pour un fichier de script bash.
— enzotib


1

Type < C-q < <


Il est plus court que ma solution de contournement et peut-être utile pour d'autres situations aussi, mais pas exactement ce que je cherchais. Merci quand même.
— enzotib

1

Après avoir jeté un œil à: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el, j'ai trouvé cette solution:

;; 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.")
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.