Emacs burada belge tamamlama nasıl devre dışı bırakılır


11

Bir bash komut dosyasını emacs ile düzenlerken ve girmeye çalışırken <<<, ikinci <emaclarda, aşağıdaki örnekte olduğu gibi, burada bir belge için bir şablon ekleyin:

<<EOF

EOF

Bu istenen çıktı değildir, çünkü bir değişmez değer girerdim <<<.

Şimdilik < < <boşluklara girmeye ve sonra silmeye başvuruyorum , ancak doğrudan girmesine izin verilmesini tercih ediyorum.


2
Ben çok fazla umurumda değil, ama bir downvote için yorum bırakmak güzel olurdu.
— enzotib

Yanıtlar:


12

Aslında Tom'un my-disable-here-documentanahtarları yeniden bağlayan özel işlevine gerek yoktur . Bu özellik aşağıdakilerle etkinleştirilebilir ve devre dışı bırakılabilir sh-electric-here-document-mode:

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

(Aktif tampon için de değiştirilebilir M-x sh-electric-here-document-mode.)


Ayrıca: sh-mode-hookbenim için çalışmadı, ama sh-set-shell-hookyaptı.
— Felipe Lema

6

Bağlama <için self-insert-commandbash modda ve daha sonra sadece karakteri ekler.

Varsayılan sh-maybe-here-documentolarak bash modundayken bağlıdır ve bu işlev otomatik yerleştirmeyi yapar.

Anahtarı geri almanın bir yolu:

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

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

İnit dosyasına tam olarak ne ekleneceğine dair biraz daha bilgi verebilir misiniz? Üzgünüm, ama ben yeni başlayanlar için emacs kullanıcısıyım.
— enzotib

Cevabıma basit bir örnek ekledim. Sadece bash değil, her türlü kabukta otomatik yerleştirmeyi devre dışı bırakır, ancak muhtemelen istediğiniz şey budur.
— Tom

Çünkü bu çözüm, (Emacs'ta 24.3 üzerinde test) artık çalışmıyor <bağlı olduğu self-insert-commandvarsayılan.
— T. Verron

2

Here-doc davranışını devre dışı bırakmanın tek nedeni , burada-string <<< eklemenizi engellemiş olması durumunda , C-<içeren bir işleve bağlanmak (insert "<<<")işe yarayacak ve yine de otomatik here-doc şablonuna izin verecektir

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

1
Teşekkür ederim, ilginç bir çözüm, ama yine de @ Tom'un cevabını tercih ediyorum, çünkü bash komut dosyası için tamamlamanın yanlış olduğunu düşünüyorum.
— enzotib


1

tip < C-q < <


Geçici çözümümden daha kısa ve diğer durumlar için de yararlı olabilir, ancak tam olarak aradığım şey değil. Yine de teşekkürler.
— enzotib

1

Bir göz attıktan sonra: http://web.mit.edu/dosathena/sandbox/emacs-19.28/lisp/sh-script.el Bu çözümü buldum:

;; 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.")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.