ก่อนอื่นคุณจะต้องเรียนรู้การใช้งานข้อความพื้นฐานกับ emacs เนื่องจาก emacs นั้นซับซ้อนมากในการค้นหาวิธีการเลือกข้อความและการคัดลอกอย่างง่ายอาจเป็นสิ่งที่ท้าทาย ดังนั้นลงทุนเวลาในการค้นหาวิธีการทำอย่างมีประสิทธิภาพ การอ่านคู่มืออาจช่วยได้ สำหรับ Mac OS X ใช้ Aquamacs รองรับการใช้งานทางลัดในตัว
การทำงานกับ ESS ไม่แตกต่างจากการทำงานกับ R ควรใช้กฎเดียวกันกับการจัดระเบียบรหัส ในกรณีของฉันทุกโครงการมีไดเรกทอรีของตัวเองซึ่งอยู่ในไดเรกทอรีหลักชื่อ R ซึ่งอยู่ในโฮมไดเร็กตอรี่ของฉัน (สำหรับ Windows ฉันแนะนำให้ชี้โฮมไดเร็กตอรี่ emacs ไปยังไดเรกทอรีที่แหล่งที่มาของคุณอยู่) ดังนั้นเมื่อฉันใช้ ESS เพื่อทำงานในโครงการฉันมักจะทำM-x R
และเลือกไดเรกทอรีเริ่มต้นไดเรกทอรีโครงการของฉัน
หลังจากเริ่มกระบวนการ R ฉันมักจะแบ่ง emacs ในสองหน้าต่าง (คำศัพท์ emacs) ด้านซ้ายฉันมีซอร์สโค้ดซึ่งฉันส่งไปยังกระบวนการ R ทางด้านขวา ทางลัดที่เกี่ยวข้อง (เหล่านี้เป็นทางลัด emacs) C-x 3
สำหรับการแยกหน้าต่างแนวตั้งC-x 1
เพื่อทำให้บัฟเฟอร์ปัจจุบันเป็นหน้าต่างเดียวและC-x 2
สำหรับการแยกหน้าต่างในแนวนอน
เมื่อส่งรหัสไปที่ R ฉันจะแยกความแตกต่างระหว่างฟังก์ชั่นและงบ R 10code.R
ฉันทำเช่นนี้โดยการเก็บรักษาฟังก์ชั่นของฉันทั้งหมดในไฟล์เดียวมักจะเรียกว่า จากนั้นฉันก็สามารถโหลดไฟล์นี้โดยใช้ตัวเลือกโหลดไฟล์ ESS (ทางลัดC-c C-l
) ข้อได้เปรียบของวิธีนี้คือมันให้แหล่งที่มาของฟังก์ชั่นทั้งหมดและไม่สร้างอะไรเลยในบัฟเฟอร์ R หากมีข้อผิดพลาดในรหัสของคุณ ESS จะแสดงข้อความใน minibuffer และคุณสามารถตรวจสอบได้โดยการกดC-c
`
อีกรหัสคือข้อความ R ซึ่งฉันพยายามอธิบายตนเอง: ข้อมูลโหลดข้อมูลที่สะอาดพอดีตัวแบบทางสถิติตรวจสอบผลลัพธ์สร้างผลลัพธ์สุดท้าย ซอร์สโค้ดสำหรับข้อความเหล่านี้คือสถานะปัจจุบันของโครงการ ความตั้งใจคือหลังจากที่โครงการเสร็จสิ้นการจัดหาไฟล์ด้วยรหัสนี้ให้ทำซ้ำโครงการ (ฉันยังใช้ git สำหรับการติดตามประวัติ) เมื่อทำงานกับไฟล์นี้ผมมักจะทำงานเฉพาะกับคำสั่ง R หนึ่งซึ่งผมส่งไปยังกระบวนการ R ผ่านฟังก์ชั่น EVAL C-c C-c
วรรคคำสั่งคำสั่งซึ่งทางลัด คำสั่งนี้ส่งไปยังการประมวลผล R ย่อหน้าเช่นข้อความที่คั่นด้วยบรรทัดใหม่ สิ่งนี้มีประโยชน์เนื่องจากคุณสามารถจัดกลุ่มคำสั่ง R ในงานและส่งงานทั้งหมดไปยังกระบวนการ R นอกจากนี้ยังไม่จำเป็นต้องเลือกข้อความซึ่งสะดวกมาก ทางลัดC-c C-c
มีข้อดีคือมันเลื่อนเคอร์เซอร์ไปที่หน้าต่าง R ดังนั้นคุณสามารถตรวจสอบผลลัพธ์ของคำสั่ง R ที่ส่งได้ทันที
ดังนั้นขั้นตอนการทำงานพื้นฐานของฉันคือการย้ายไปมาระหว่างหน้าต่างกับบัฟเฟอร์ เพื่ออำนวยความสะดวกฉันใช้ทางลัดต่อไปนี้ในไฟล์. emacs ของฉัน:
(define-key global-map [f1] 'Control-X-prefix)
(define-key global-map [f3] 'find-file)
(define-key global-map [f2] 'save-buffer)
(define-key global-map [f8] 'kill-buffer)
(define-key global-map [f5] 'switch-to-buffer)
(define-key global-map [f6] 'other-window)
(define-key global-map [f9] 'ess-load-file)
ฉันไม่ค่อยได้ใช้f1
แต่คนอื่น ๆ ทั้งหมดบ่อยมาก การตั้งค่า ESS เฉพาะอื่น ๆ ที่ฉันใช้มีดังต่อไปนี้:
(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)
นี่เป็นการบอก ESS ให้ทำให้แท็บกว้าง 4 ตัวอักษร (ค่าเริ่มต้นคือ 2) ซึ่งเป็นการตั้งค่าส่วนตัวของฉันและขยายจำนวนคำสั่งที่คุณออก ESS บันทึกเป็นประวัติ
สำหรับการทำงานกับกระบวนการ R โดยตรงฉันพบว่าทางลัดต่อไปนี้มีประโยชน์มาก:
(add-hook 'inferior-ess-mode-hook
'(lambda nil
(define-key inferior-ess-mode-map [\C-up] 'comint-previous-matching-input-from-input)
(define-key inferior-ess-mode-map [\C-down] 'comint-next-matching-input-from-input)
(define-key inferior-ess-mode-map [\C-x \t] 'comint-dynamic-complete-filename)
)
)
สิ่งนี้จะเรียกคืนคำสั่ง R จากประวัติคำสั่ง R ของคุณ แต่จะพยายามจับคู่กับคำสั่ง R ที่มีอยู่แล้วในบรรทัดของคุณ ดังนั้นตัวอย่างเช่นพิมพ์pl
ในกระบวนการ R และกด\C-up
(นั่นคือการควบคุมและลูกศรขึ้น) จะวนรอบคำสั่งทั้งหมดที่เริ่มต้นด้วยpl
ดังนั้นจะจำตัวอย่างplot(...
คำสั่งทั้งหมด
การตั้งค่าสุดท้ายที่ฉันใช้กับ ESS มีดังต่อไปนี้:
(setq ess-ask-about-transfile t)
วิธีนี้ ESS จะถามตำแหน่งที่จะบันทึกข้อความในบัฟเฟอร์ด้วยกระบวนการ R เสมอ ฉันมักจะจัดเรียงไฟล์เหล่านี้ตามวันที่ดังนั้นฉันจึงมีวิธีอื่นในการติดตามสิ่งที่ฉันทำอยู่เสมอ ข้อแม้เดียวของตัวเลือกนี้คือว่าด้วยเหตุผลบางอย่าง ESS ชุดกันชน R C-x C-q
ในการอ่านเท่านั้นหลังจากที่โหลดอาร์ทางลัดสำหรับการทำบัฟเฟอร์สามารถเขียนเป็น
ดังนั้นนี่คือการตั้งค่าของฉันที่ฉันใช้สำหรับการทำงานกับ ESS ฉันรู้สึกมีความสุขกับพวกเขาและฉันไม่รู้สึกว่าจำเป็นต้องเพิ่มอะไรอีกแล้วเมื่อสองสามปีที่แล้ว เมื่อแนะนำ ESS ให้กับผู้ใช้ครั้งแรกฉันมักจะให้ภาพรวมนี้
ฉันจะจบลงด้วยทางลัดสุดท้ายซึ่งสำหรับฉันเป็นทางลัดที่ใช้มากที่สุดเมื่อทำงานกับ Emacs และโดยเฉพาะอย่างยิ่งกับ ESS C-g
ซึ่งจะออกจากคำสั่งใน mini-buffer ตลอดหลายปีที่ผ่านมาฉันทำงานกับ Emacs และ ESS ฉันยังคงสามารถเรียกใช้คำสั่ง Emacs บางตัวที่ฉันไม่ต้องการC-g
มีประโยชน์มากในสถานการณ์เหล่านี้