Come disabilitare emacs qui documenta il completamento


11

Quando si modifica un file di script bash con emacs e si tenta di accedere <<<, al secondo <emacs inserire un modello per un documento qui, come nell'esempio seguente:

<<EOF

EOF

Questo non è l'output desiderato, perché vorrei inserire un valore letterale <<<.

Per il momento ricomincio ad entrare < < <, quindi a cancellare gli spazi, ma preferisco avere il permesso di entrare direttamente.


2
Non che mi importi troppo, ma sarebbe bello lasciare un commento per un voto negativo.
— enzotib,

Risposte:


12

In realtà non è necessario che la my-disable-here-documentfunzione personalizzata di Tom rileghi i tasti. Questa funzione può essere abilitata e disabilitata con sh-electric-here-document-mode:

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

(Può anche essere attivato / disattivato per il buffer attivo tramite M-x sh-electric-here-document-mode.)


Inoltre: sh-mode-hooknon ha funzionato per me, ma sh-set-shell-hookha funzionato.
— Felipe Lema,

6

Associa <a self-insert-commandin modalità bash e quindi inserirà solo il carattere.

Per impostazione predefinita, è associato a sh-maybe-here-documentquando è in modalità bash e quella funzione esegue l'inserimento automatico.

Ecco un modo per rimbalzare la chiave:

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

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

Potete per favore fornire qualche informazione in più su cosa inserire esattamente nel file init? Siamo spiacenti, ma sono un utente principiante di emacs.
— enzotib,

Ho aggiunto un semplice esempio alla mia risposta. Disabilita l'inserimento automatico in ogni tipo di shell, non solo bash, ma comunque è ciò che vuoi.
— Tom,

Questa soluzione non funziona più (testata su emacs 24.3), perché <è vincolata per self-insert-commandimpostazione predefinita.
— T. Verron,

2

Se l'unica ragione che si desidera disattivare il qui-doc comportamento è che ti impedisce di inserire una stringa here <<<, quindi vincolante C-<ad una funzione che contiene (insert "<<<")il lavoro volontà, e ancora consentire l'auto qui-doc template

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

1
Grazie, soluzione interessante, ma preferisco ancora la risposta di @ Tom, perché ritengo che il completamento sia sbagliato per un file di script bash.
— enzotib,


1

genere < C-q < <


È più breve della mia soluzione alternativa e forse utile anche per altre situazioni, ma non esattamente quello che stavo cercando. Grazie lo stesso.
— enzotib,

1

Dopo aver dato un'occhiata a: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el ho trovato questa soluzione:

;; 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.")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.