วิธีการเลือกระหว่างศูนย์และ 0 หรือ t และ 1 เมื่อตั้งค่าตัวแปรหรือเปิดใช้งานโหมด


19

ผมเข้าใจว่าnil, 0และ / หรือ-1จะใช้สำหรับการปิดใช้งานคุณลักษณะบางอย่างและt, 1และ / หรือ+1จะใช้สำหรับการเปิดใช้งานคุณลักษณะบางอย่าง เมื่อกำหนดตัวแปรหรือเปิด / ปิดการใช้งานโหมดรองฉันควรเลือกแบบใด

ฉันได้เห็นการเปลี่ยนแปลงเหล่านี้ทั้งหมดที่ใช้ในจุดหนึ่งหรืออื่น มันทำให้ฉันสงสัยว่าจริงๆแล้วมีความแตกต่างระหว่างพวกเขาหรือไม่ ฉันเห็นว่าบางครั้งการใช้0ไม่ได้ผลสำหรับฉันในขณะที่nilไม่ มีการใช้งานที่แตกต่างกันหรือไม่?


1
ฉันได้เขียนคำถามอีกครั้งเพื่อระบุสิ่งที่ฉันคิดว่าคุณกำลังถามอย่างชัดเจนยิ่งขึ้น อย่าลังเลที่จะยกเลิกการแก้ไขหากฉันผิด
nispio

@nispio การแก้ไขของคุณไม่เป็นไร ขอบคุณมาก. :)
greduan

คำตอบ:


17

TL; DR

ก่อนที่คุณจะตั้งค่าตัวแปรใด ๆ คุณต้องรู้ว่าจะตีความตัวแปรอย่างไร ในทำนองเดียวกันก่อนที่คุณจะเรียกใช้ฟังก์ชันใด ๆ (ไม่รวมถึงโหมดที่ใช้เพื่อสลับโหมดรอง) คุณต้องรู้ว่าอาร์กิวเมนต์ของฟังก์ชันนั้นถูกตีความอย่างไร

ใช้C-hfและC-hvเพื่อดูเอกสารสำหรับฟังก์ชั่นหรือตัวแปรที่เป็นปัญหา ควรระบุค่าที่คาดไว้

"Non-ศูนย์" หมายถึงตัวอักษรอะไรnilที่ไม่ได้เป็น ซึ่งรวมถึง0และตัวเลขติดลบ


โหมดรอง

ลองมาตัวอย่างที่เฉพาะเจาะจง พิมพ์C-hfblink-cursor-mode และกดRETเพื่อดูเอกสารประกอบการใช้งานสำหรับblink-cursor-mode:

(โหมดกะพริบตาเคอร์เซอร์และตัวเลือก ARG)

สลับเคอร์เซอร์กะพริบ (โหมดเคอร์เซอร์กะพริบตา) ด้วยอาร์กิวเมนต์นำหน้า ARG ให้เปิดใช้งานโหมดกะพริบตาเคอร์เซอร์หาก ARG เป็นบวกและปิดใช้งานเป็นอย่างอื่น หากถูกเรียกจาก Lisp ให้เปิดใช้งานโหมดหากไม่ระบุ ARG หรือไม่มี

เราสามารถเปิดใช้งานโหมดเคอร์เซอร์กะพริบได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้:

(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)

ขอให้สังเกตว่าการโต้แย้งของtจะทำงานแม้ว่าสตริง doc ไม่ได้พูดถึงมันโดยเฉพาะ แม้ว่าจะเป็นกรณีนี้การเดิมพันที่ปลอดภัยที่สุดของคุณคือการใช้สิ่งที่สตริง doc บอกให้คุณใช้ซึ่งในกรณีนี้คือค่าบวก

นอกจากนี้ให้สังเกตว่าการโต้แย้งของnilจะทำงาน ฉันขอแนะนำอย่างมากกับnilวิธีนี้เพราะมันทำให้ความตั้งใจของคุณไม่ชัดเจน หากฉันอ่านรหัสเสียงกระเพื่อมของคุณและฉันเห็นการnilโต้แย้งฉันจะสมมติว่าคุณต้องการปิดการใช้งานโหมดรอง

นอกจากนี้เรายังสามารถปิดใช้งานblink-cursor-modeด้วยวิธีต่อไปนี้:

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

แจ้งให้ทราบอีกครั้งว่าnilเป็นไม่ได้เป็นหนึ่งในวิธีการที่จะปิดการใช้งานโหมดย่อยนี้ นี่เป็นจริงของโหมดย่อยเกือบทุกโหมดที่คุณจะพบ


ตัวแปร

ทีนี้ลองดูตัวอย่างของตัวแปร พิมพ์C-hvtruncate-linesและกดRETเพื่อดูเอกสารประกอบสำหรับตัวแปรtruncate-lines:

truncate-lines เป็นตัวแปรที่กำหนดใน `ซอร์สโค้ด C '

ไม่ใช่ศูนย์หมายความว่าอย่าแสดงบรรทัดต่อเนื่อง ให้ข้อความแต่ละบรรทัดเพียงบรรทัดเดียวเท่านั้น

คุณสามารถเปิดการตัดได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้:

(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)

มันอาจทำให้คุณประหลาดใจว่า0และ-1จะทำงาน อีกครั้งฉันจะแนะนำต่อต้านการใช้พวกเขาเพราะมันทำให้ความตั้งใจของคุณไม่ชัดเจน

วิธีเดียวที่จะปิดการใช้งานการตัดคือ:

(setq truncate-lines nil)     ; nil value

กล่าวอีกนัยหนึ่งคุณสามารถตั้งค่าtruncate-linesเท่ากับตัวเลขตัวอักษรสตริงรายการหรืออะไรก็ได้ที่คุณต้องการตราบใดที่มันไม่ได้ประเมินnilมันจะเปิดใช้งานการตัด (แต่คุณควรติดกับtหรือจริงๆ1)


สิ่งนี้ตอบคำถามของฉัน ขอขอบคุณ. :)
greduan

0

สิ่งเหล่านี้ล้วนแตกต่างกัน 0, 1 และ -1 เป็นตัวเลขที่ต่างกัน nilเป็นสัญลักษณ์

พวกเขาแต่ละคนใช้ทั่วสถานที่สำหรับสิ่งต่าง ๆ มากมาย หากต้องการทราบว่าแต่ละอันใช้สำหรับบริบทใดให้ดูเอกสารสำหรับบริบทนั้น และนั่นรวมถึงบริบทของการเปิดหรือปิดโหมดที่แตกต่างกันเปิดใช้งานและปิดใช้งานสิ่งต่าง ๆ โดยใช้ตัวแปรและบริบทอื่น ๆ มากมาย

ในผลรวม:

  • คำถามของคุณกว้างเกินไปที่จะเป็นประโยชน์
  • คุณต้องปรึกษา doc: (a) โดยทั่วไปเพื่อเรียนรู้เล็กน้อยเกี่ยวกับ Emacs Lisp และ (b) ในบริบทเฉพาะ (เช่น doc สำหรับโหมดเฉพาะ)

โดยทั่วไป doc สำหรับโหมดที่กำหนดจะบอกให้คุณทราบถึงวิธีการเปิดและปิด ถ้ามันบอกให้คุณใช้ 1 หรือ -1 nilหรือไม่ใช่nilเพื่ออะไรบางอย่างนั่นคือความหมาย มีกฎทั่วไปบางประการสำหรับการเปิดและปิดโหมด (แบบโต้ตอบและจากรหัส Lisp) แต่ดูเหมือนว่าคุณจะต้องเริ่มต้นด้วยการได้รับภูมิหลังทั่วไป

ศึกษาเอกสาร Emacs เพื่อเรียนรู้วิธีขอความช่วยเหลือและข้อมูลอื่น ๆ จาก Emacs เอง : วิธีตรวจสอบค่าของตัวแปร, วิธีดูเอกสารของตัวแปรหรือฟังก์ชัน (รวมถึงฟังก์ชั่นที่เปิด / ปิดโหมด) และอื่น ๆ

คุณสามารถเริ่มต้นด้วยการใช้ C-h C-h ( Ctrl-h Ctrl-h) เพื่อเรียนรู้เกี่ยวกับระบบช่วยเหลือ Emacs และสร้างจากที่นั่น

C-h rนำคุณเข้าสู่คู่มือ Emacs ลอง Emacs C-h tกวดวิชา: และตรวจสอบ Emacs วิกิพีเดียNewbieหน้าและหน้าเกี่ยวกับLearningEmacs

ในการเริ่มเรียนรู้เกี่ยวกับ Emacs Lisp: C-h iจากนั้นเลือกคู่มือที่มีชื่อEmacs Lisp Introและเริ่มอ่าน และตรวจสอบหน้า Emacs วิกิพีเดียเกี่ยวกับการเรียนรู้ Emacs เสียงกระเพื่อม


1
ขอบคุณสำหรับคำตอบ. :) ฉันเดาว่าฉันกำลังถามเกี่ยวกับบริบทที่ใช้อยู่ควรทำให้ชัดเจนขึ้น ขอขอบคุณ. :) ฉันตระหนักถึงความแตกต่างที่สำคัญระหว่างสัญลักษณ์ต่าง ๆ เช่นวิธีnilการเทียบเท่าตรรกะของเท็จและtของจริงและส่วนที่เหลือเป็นเพียงตัวเลข แต่ฉันไม่แน่ใจว่าสิ่งเหล่านี้มักจะใช้ในบริบทใดบ้าง
greduan

ดูสิ่งที่ฉันเขียนเกี่ยวกับข้อมูลทั่วไปเกี่ยวกับโหมด (เชื่อมโยงกับคู่มือ) แม้จะมีข้อมูลทั่วไปคุณควรเริ่มต้นด้วยการตรวจสอบ doc สำหรับโหมดเฉพาะที่คุณสนใจมันจะบอกคุณว่าจะใช้เพื่อเปิดหรือปิด ถ้ามันไม่ได้แล้วพฤติกรรมทั่วไปที่อธิบายไว้ในคู่มือการใช้งานนำไปใช้ แต่เริ่มต้นด้วย doc จุดไม่ได้เป็นความแตกต่างระหว่างสิ่งเหล่านั้นในตัวเอง ประเด็นคือความแตกต่างในวิธีการใช้งานในบริบทเฉพาะ สำหรับสิ่งนั้นเริ่มต้นด้วยการถามบริบท
ดึง

1
ตกลง. ขอบคุณมาก. :) เจ๋งที่ Emacs มีเว็บไซต์ SE เป็นของตัวเองเหรอ?
greduan

1
ป.ล. ไม่ต้องกังวล ฉันแน่ใจว่าคนอื่น ๆ จะปูดนี่เกี่ยวกับบางส่วนของกฎทั่วไป ;-) ฉันชอบที่จะ (ก) พาคุณไปปรึกษาเอกสารเกี่ยวกับเรื่องนี้เพราะมันถูกเขียนขึ้นด้วยการเรียนรู้ในใจนี้และ (ข) ให้คุณเริ่มต้นด้วยการถามตัวเองเสมอเกี่ยวกับโหมดนั้น กฎทั่วไปไม่ได้เจาะจงโหมดของคนที่กล้าหาญและหากคุณไม่สนใจสิ่งหลังคุณจะพลาดสิ่งต่าง ๆ
ดึง

สิ่งที่จะเจ๋งคือเมื่อ SE ได้รับโหมด Emacs ของตัวเอง ;-)
ดึง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.