Dengan kata lain, dapatkah saya memulai emacs satu kali, dan setiap kali saya mengetik emacs apa pun di terminal, apakah itu terbuka sebagai buffer dalam instance emacs saya yang ada?
Iya nih.
Bagaimana Anda melakukannya tergantung pada OS dan versi emacs (XEmacs, GNU emacs) yang Anda jalankan. Tempat yang baik untuk memulai adalah melihat GnuClient dan EmacsClient .
[kata-kata kasar] Ini adalah satu lagi dari fitur-fitur itu yang tidak boleh dibayangkan dan diaktifkan secara default pada banyak editor lain, tetapi terbukti cukup sulit di Emacs. [/ kata-kata kasar]
Bagaimanapun, inilah cara saya melakukannya. Pertama, seperti yang disebutkan jwernerny, EmacsClient lakukan triknya. Yang harus Anda lakukan untuk mengedit foo.txt adalah
emacsclient --alternate-editor='' foo.txt
Perintah ini akan mencoba untuk terhubung ke server Emacs yang sedang berjalan. Jika tidak ada server, itu akan memulai. Ini kemudian akan terhubung ke server dan memerintahkannya untuk membuka file yang ditentukan.
Server berjalan sebagai daemon (proses latar belakang). Jika Anda berlari ps x | grep emacs
Anda akan melihat proses dengan baris perintah emacs --daemon
. Masalah yang saya miliki adalah bahwa Emacs hanya berjalan di terminal jika Anda melakukannya seperti ini, jadi jika Anda ingin menjalankannya di jendela grafis, baca terus ... (dan bunuh proses daemon terlebih dahulu)
Inilah yang saya tambahkan ke .bashrc saya:
alias e='emacsclient --no-wait --alternate-editor ~/.emacs.d/start.sh'
dan isi ~/.emacs.d/start.sh
adalah:
#!/bin/sh
emacs --eval '(server-start)' $* &
Itu e
alias dapat digunakan untuk membuka file, baik dengan memulai instance Emacs baru (dengan server), atau menggunakan yang sudah ada.
Untuk perintah editor yang menunggu sampai Anda selesai dengan file (baik untuk Git melakukan dll), hapus --no-wait
pilihan. Saya melakukan ini di .bashrc saya:
export EDITOR='emacsclient --alternate-editor ~/.emacs.d/start.sh'
Menggunakan C-x #
ketika Anda selesai mengedit file. Bagus tua C-x k
akan mengajukan pertanyaan yang menjengkelkan "Buffer foo.txt masih memiliki klien; bunuh