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.