Değişkenleri ayarlarken veya modları etkinleştirirken nil ve 0 veya t ve 1 arasında seçim yapma


19

Anlıyorum nil, 0ve / veya -1bazı özellikleri devre dışı bırakmak için kullanılır t, 1ve / veya +1bazı özellikleri etkinleştirmek için kullanılır. Değişkenler atarken veya küçük modları etkinleştirirken / devre dışı bırakırken hangisini seçmeliyim?

Tüm bu varyasyonları bir noktada kullandım. Aralarında gerçekten bir fark olup olmadığını merak etmeme neden oluyor. Bazen kullanmanın 0benim için işe yaramadığını gördüm nil. Nerede kullanıldıklarına dair farklılıklar var mı?


1
Ne istediğini düşündüğümü daha açık bir şekilde belirtmek için soruyu yeniden yazdım. Yanılıyorsam düzenlemeyi geri almaktan çekinmeyin.
nispio

@ nispio Düzenlemelerin iyi. Çok teşekkür ederim. :)
greduan

Yanıtlar:


17

TL; DR

Herhangi bir değişkeni ayarlamadan önce, değişkenin nasıl yorumlanacağını bilmeniz gerekir. Benzer şekilde, herhangi bir işlevi çağırmadan önce (küçük modlar arasında geçiş yapmak için kullanılanlar dahil), bu işlevin bağımsız değişkenlerinin nasıl yorumlandığını bilmelisiniz.

Söz konusu işlev veya değişkenin belgelerine bakmak için C-hfve tuşlarını kullanın C-hv. Beklenen değerleri belirtmelidir.

"Non-nil" anlamına gelir anlamıyla şey değildir nil. Buna 0negatif sayılar dahildir .


Küçük Modlar

Belirli bir örnek verelim. Yazın C-hfblink-cursor-mode ve vurmak RETiçin fonksiyon belgelerine görmek için blink-cursor-mode:

(yanıp sönen imleç modu ve isteğe bağlı ARG)

İmlecin yanıp sönmesini aç / kapat (İmleç modunu kırp). ARG önek argümanıyla, ARG pozitifse Göz Kırpma İmleç modunu etkinleştirin ve aksi halde devre dışı bırakın. Lisp'den çağrılırsa, ARG atlanırsa veya sıfırsa modu etkinleştirin.

Göz Kırpma İmleci modunu aşağıdaki yollardan biriyle etkinleştirebiliriz:

(blink-cursor-mode)           ; Omitted argument
(blink-cursor-mode 1)         ; Positive argument
(blink-cursor-mode t)         ; True argument
(blink-cursor-mode nil)       ; nil argument (don't use this)

tDoc dizesinden özellikle bahsetmese de , bir argümanın işe yarayacağına dikkat edin . Bu genellikle söz konusu olsa da, en güvenli bahisiniz doc dizesinin size söylediklerini kullanmaktır, bu durumda bu olumlu bir değerdir.

Ayrıca, bir argümanın nilişe yarayacağına dikkat edin. nilBu şekilde şiddetle tavsiye ediyorum çünkü niyetinizi net değil. Lisp kodunuzu gözden geçiriyor olsaydım ve bir nilargüman görürsem , küçük modu devre dışı bırakmak istediğinizi varsayardım.

Ayrıca blink-cursor-modeaşağıdaki şekillerde devre dışı bırakabiliriz :

(blink-cursor-mode 0)         ; Non-positive argument
(blink-cursor-mode -1)        ; Negative argument

Bildirim yine o nilolduğunu değil bu küçük modunu devre dışı bırakmak için yollarından biri. Bu karşılaşacağınız neredeyse tüm küçük modlar için geçerlidir.


Değişkenler

Şimdi bir değişken örneğine bakalım. Yazın C-hvtruncate-linesve isabet RETdeğişken belgelerine bakmak için truncate-lines:

truncate-lines `` C kaynak kodu '' nda tanımlanan bir değişkendir.

Sıfır olmayan araçlar devam çizgilerini göstermez. Bunun yerine, her metin satırına yalnızca bir ekran satırı verin.

Kesmeyi aşağıdaki yollardan biriyle açabilirsiniz:

(setq truncate-lines t)       ; Boolean true value (non-nil)
(setq truncate-lines 1)       ; Positive value (non-nil)
(setq truncate-lines 0)       ; Zero value (non-nil)
(setq truncate-lines -1)      ; Negative value (non-nil)

0Ve -1iradesinin çalışması sizi şaşırtabilir . Yine, onları kullanmaya karşı öneriyorum çünkü niyetlerinizi netleştirmiyor.

Kesmeyi devre dışı bırakmanın tek yolu şudur:

(setq truncate-lines nil)     ; nil value

Başka bir deyişle ayarlayabilirsiniz truncate-linessürece öyle değil hiç değerlendirirken, sayılar, harfler, dizeleri, listeleri veya başka bir şey, istediğiniz eşit nilo olacaktır etkinleştirmek kesme. (Ama gerçekten tveya ile devam etmelisin 1).


Bu sorumu yanıtladı. Teşekkür ederim. :)
greduan

0

Bunların hepsi farklı şeyler. 0, 1 ve -1 farklı sayılardır; nilbir semboldür.

Her biri çok farklı şeyler için her yerde kullanılıyor. Her ne için kullanıldığını öğrenmek için belirli bir bağlamda , bu bağlamda doktor, danışmak . Bu, farklı modları açma veya kapatma, değişkenleri kullanarak farklı şeyleri etkinleştirme ve devre dışı bırakma bağlamlarını ve diğer birçok bağlamı içerir.

Toplamda:

  • Sorunuz yararlı olamayacak kadar geniş.
  • Dokümana danışmanız gerekir: (a) genel olarak, Emacs Lisp hakkında biraz bilgi edinmek ve (b) belirli bağlamlarda (örneğin, belirli bir mod için doküman).

Belirli bir mod için doc genellikle bu modun nasıl açılıp kapatılacağını anlatır. Eğer bir şey için 1 ya da -1 ya nilda ya da olmayan bir nilşey kullanmanızı söylerse , o zaman bu demektir. Modları açıp kapatmak için bazı genel kurallar vardır (etkileşimli ve Lisp kodundan). Ama kulağa genel bir arka plan edinerek başlamanız gerekiyor gibi görünüyor.

Emacs'ın kendisinden nasıl yardım ve diğer bilgileri isteyeceğinizi öğrenmek için Emacs belgesine danışın : bir değişkenin değerinin nasıl kontrol edileceği, bir değişkenin veya bir fonksiyonun belgesinin nasıl görüleceği (bir modu açan / kapatan bir fonksiyon dahil) , ve bunun gibi.

Şunları yapabilirsiniz kullanarak başlayıp C-h C-h ( Ctrl-h Ctrl-hEmacs yardım sistemi hakkında bilgi almak,). Ve oradan inşa et.

C-h rsizi Emacs kılavuzuna yerleştirir. Emacs öğretici deneyin: C-h t. Ve Emacs Wiki Newbie sayfasını ve LearningEmacs hakkındaki sayfayı kontrol edin .

Emacs Lisp: hakkında bilgi edinmek için C-h i, adlı kılavuzu seçin Emacs Lisp Introve okumaya başlayın. Ve Öğrenme Emacs Lisp hakkında Emacs Wiki sayfasını kontrol edin .


1
Cevabınız için teşekkürler. :) Sanırım hangi bağlamlarda kullanıldıklarını soruyordum. Bunu daha açık hale getirmeliydim. Teşekkür ederim. :) Semboller arasındaki temel farklılıkların farkındayım, örneğin nilyanlış ve tdoğru mantıksal eşdeğeri ve gerisi sadece sayılar. Ama genellikle hangi bağlamlarda kullanıldıklarından emin
değildim

Modlarla ilgili genel bilgiler hakkında ne yazdığımı görün (kılavuza bağlı olarak). Bu tür genel bilgilere rağmen, her zaman dokümanı ilgilendiğiniz mod için kontrol ederek başlamalısınız. Bu, açmak veya kapatmak için ne kullanmanız gerektiğini söyleyecektir. Değilse, kılavuzda açıklanan genel davranış geçerlidir, ancak belirli mod doc ile başlayın . Mesele, kendi içlerinde ve kendi içlerinde bu şeyler arasındaki farklar değildir. Mesele, belirli bağlamlarda nasıl kullanıldıklarındaki farklardır. Bunun için bağlamı sorarak başlayın.
Drew

1
TAMAM. Çok teşekkür ederim. :) Serin Emacs kendi SE sitesi var ha?
greduan

1
PS Endişelenme. Eminim başkaları burada bazı genel kurallar hakkında fasulye dökecek . ;-) Ben (a) bu konuda doktora danışmak istiyorum, çünkü sadece bu öğrenme akılda yazıldı ve (b) her zaman kendisi hakkında belirli bir mod sorarak başlamak için olsun. Genel kurallar mod ayrıntılarını koz vermez ve ikincisini göz ardı ederseniz bir şeyleri kaçırırsınız.
Drew

SE'nin kendi Emacs modunu alması harika olacak. ;-)
Drew
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.