'<<<' yazmak neden kabuk betiği modundayken '<< EOF \ n <' üretir?


13

Emacs'ta bir kabuk komut dosyası düzenlediğimde ve ham dizeyi stdin'e yönlendirmek için üç köşeli ayraç yazdığımda, emacs 'EOF' karakterlerini ve aralarına yeni bir satır ekler, bu yüzden

cat <<< 'some string'

olur

cat <<EOF
< 'some string'

Geri dönüp istediğim durumda arabellek almak için fazladan karakterleri silebilirim, ancak bu çok iğrenç bir davranış ve sadece kabuk kalıbı modunda gerçekleşiyor gibi görünüyor, genellikle bu kalıbı yazdığım tek zaman. Bu davranışı devre dışı bırakmanın bir yolu var mı?

Yanıtlar:


13

Bunun nedeni sh-electric-here-document-mode. Etkinleştirildiğinde <<buraya belge iskeleti ekler.

Bu, varsayılan olarak etkindir. Bir kanca ile devre dışı bırakabilirsiniz, örneğin:

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

4
Tabii Başka bir seçenek eklemektir <<<ile C-3 <.
glucas

1
Nasıl kapatacağınızı gösterdiğiniz için teşekkür ederiz. Bu sh-electric-here-document-mode oldukça işe yaramaz bir özellik, IMO.
Dan Moulding

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

17

glucas tam olarak doğru, ama cevabını tamamlamak için kendimi burada doktor yerleştirmeyi biraz daha akıllı hale getirmek için kullandığım bir kod parçasına sahibim.

sh-electric-here-document-modeEtkinleştirmeyle birlikte bu öneri, iki şivron yazarsanız, otomatik burada doc oluşturulacak, ancak daha sonra yazdığınız bir sonraki karakter başka bir şivron ise, geri dönecek ve sadece <<< ile bırakılacaksınız.

(defadvice sh--maybe-here-document (around be-smart-about-it activate)
  "Do normal here doc auto insert, but if you type another chevron, revert and leave just <<<."
  (if (and (= (current-column) 1)
           (looking-back "^<")
           (looking-at "\nEOF")
           (save-excursion
             (forward-line -1)
             (end-of-line 1)
             (looking-back "<<EOF")))
      (progn (delete-region (search-backward "EOF") (search-forward "EOF" nil t 2))
             (insert "<"))
    ad-do-it))

Tabii ki bu, burada bir doktorla bir chevron ile başlamak istiyorsanız, onu ham olarak eklemeniz gerekeceği anlamına gelir C-q<. Bu yüzden daha fazla ne yaptığınıza bağlıdır, burada dizelerden daha fazla şey yaparsanız, bu dokümanlara sahip olmak güzel olabilir, eğer yapmasanız bile, burada bir şivron ile bir şevron başlatmak ve rahatsız edici olmak.

resim açıklamasını buraya girin


Ah, bu güzel!
glucas
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.