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.