Pertama, Anda perlu mempelajari operasi teks dasar dengan emacs. Karena emacs sangat canggih mencari tahu bagaimana memilih teks dan menyalin mungkin menjadi tantangan. Jadi investasikan waktu untuk mencari tahu cara melakukannya secara efisien. Membaca manual mungkin bisa membantu. Untuk Mac OS X menggunakan Aquamacs, ia mendukung pintasan asli.
Bekerja dengan ESS tidak berbeda dengan bekerja dengan R. Aturan yang sama untuk mengatur kode harus berlaku. Dalam kasus saya, setiap proyek memiliki direktori sendiri, yang berada di direktori induk yang disebut R, yang ada di direktori home saya (Untuk Windows, saya sarankan untuk mengarahkan direktori home emacs ke direktori tempat semua sumber Anda berada). Jadi ketika saya menggunakan ESS untuk mengerjakan proyek saya selalu melakukan M-x R
dan memilih direktori awal direktori proyek saya.
Setelah memulai proses R, saya biasanya membagi emacs dalam dua jendela (terminologi emacs). Kemudian di sebelah kiri saya memiliki kode sumber, yang saya kirim ke proses R di sebelah kanan. Pintasan yang relevan (ini adalah pintasan emacs) adalah C-x 3
untuk membelah jendela secara vertikal, C-x 1
untuk menjadikan buffer saat ini satu-satunya jendela dan C-x 2
untuk membelah jendela secara horizontal.
Saat mengirim kode ke R, saya menjaga perbedaan antara fungsi dan pernyataan R. Saya melakukan ini dengan menjaga semua fungsi saya dalam satu file yang biasa disebut 10code.R
. Maka saya cukup memuat file ini menggunakan opsi memuat file ESS (pintasan C-c C-l
). Keuntungan dari pendekatan ini adalah bahwa ia sumber semua fungsi dan tidak menghasilkan apa pun di buffer R. Jika ada kesalahan dalam kode Anda maka ESS menampilkan pesan di minibuffer dan Anda dapat menyelidikinya dengan menekan C-c
`.
Kode lainnya adalah pernyataan R, yang saya coba jaga agar tetap jelas: memuat data, membersihkan data, mencocokkan model statistik, memeriksa hasil, menghasilkan hasil akhir. Kode sumber untuk pernyataan ini adalah status proyek saat ini. Maksudnya adalah setelah proyek selesai, sumber file dengan kode ini, mereproduksi proyek (Saya juga menggunakan git untuk melacak riwayat). Ketika bekerja dengan file ini, saya biasanya hanya bekerja dengan satu pernyataan R, yang saya kirim ke proses R melalui fungsi eval, paragraf, perintah pernyataan yang pintasannya C-c C-c
. Perintah ini mengirim ke R untuk memproses paragraf, yaitu teks yang dibatasi oleh baris baru. Ini berguna, karena Anda dapat mengelompokkan pernyataan R ke dalam tugas, dan mengirim seluruh tugas ke proses R. Itu juga tidak memerlukan memilih teks, yang juga sangat nyaman. Jalan pintasC-c C-c
memiliki keuntungan karena memindahkan kursor ke jendela R, sehingga Anda segera dapat memeriksa hasil pernyataan R. yang dikirim.
Jadi alur kerja dasar saya banyak bergerak antara windows dan buffer. Untuk memfasilitasi ini saya menggunakan cara pintas berikut dalam file .emacs saya:
(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)
Saya jarang menggunakan f1
, tetapi yang lainnya sangat sering. Pengaturan ESS spesifik lainnya yang saya gunakan adalah sebagai berikut:
(setq comint-input-ring-size 1000)
(setq ess-indent-level 4)
(setq ess-arg-function-offset 4)
(setq ess-else-offset 4)
Ini memberitahu ESS untuk membuat tab 4 karakter lebarnya (defaultnya adalah 2), yang merupakan preferensi pribadi saya, dan memperluas jumlah perintah yang dikeluarkan ESS yang disimpan sebagai riwayat.
Untuk bekerja dengan proses R secara langsung, saya menemukan pintasan berikut sangat berguna:
(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)
)
)
Ini mengingat kembali pernyataan R dari riwayat pernyataan R Anda, tetapi mencoba mencocokkannya dengan yang sudah ada di baris Anda. Jadi misalnya mengetik pl
dalam proses R dan menekan \C-up
(itu kontrol dan panah atas) akan menggilir semua pernyataan yang dimulai dengan pl
, jadi akan memanggil kembali misalnya semua plot(...
perintah.
Pengaturan terakhir yang saya gunakan dengan ESS adalah sebagai berikut:
(setq ess-ask-about-transfile t)
Dengan cara ini ESS selalu bertanya di mana harus menyimpan teks dalam buffer dengan proses R. Saya biasanya memberi nomor file-file ini menurut tanggal, jadi saya selalu punya cara lain untuk melacak apa yang sebenarnya saya lakukan. Satu-satunya peringatan dari opsi ini adalah bahwa untuk beberapa alasan ESS menetapkan buffer R hanya untuk dibaca, setelah memuat R. Shortcut untuk membuat buffer dapat ditulis adalah C-x C-q
.
Jadi ini adalah pengaturan saya yang saya gunakan untuk bekerja dengan ESS, saya merasa senang dengan mereka dan saya tidak merasa perlu menambahkan apa pun selama beberapa tahun. Saat memperkenalkan ESS kepada pengguna pertama kali, saya biasanya memberikan tinjauan umum ini.
Saya akan mengakhiri dengan jalan pintas terakhir yang bagi saya adalah jalan pintas yang paling sering digunakan ketika bekerja dengan Emacs dan dengan ESS khususnya C-g
yang keluar dari perintah di mini-buffer. Selama bertahun-tahun saya bekerja dengan Emacs dan ESS saya masih berhasil memanggil beberapa perintah Emacs yang tidak saya inginkan, C-g
sangat membantu dalam situasi ini.