Другими словами, могу ли я запустить emacs один раз, и всякий раз, когда я набираю emacs в терминале, он открывается как буфер в моем существующем экземпляре emacs?
2 ответа
Да.
Как вы это сделаете, зависит от операционной системы и версии emacs (XEmacs, GNU emacs), которую вы используете. Хорошее место для начала - взглянуть на GnuClient и EmacsClient.
[rant] Это еще одна из тех функций, которая проста и включена по умолчанию во многих других редакторах, но оказывается довольно сложной в Emacs. [/rant]
Во всяком случае, вот как я это сделал. Во-первых, как отметил jwernerny, EmacsClient делает свое дело. Все, что вам нужно сделать, чтобы редактировать foo.txt, это
emacsclient --alternate-editor='' foo.txt
Эта команда попытается подключиться к работающему серверу Emacs. Если сервера нет, он запустится. Затем он подключится к серверу и даст указание открыть указанный файл.
Сервер работает как демон (фоновый процесс). Если вы запустите ps x | grep emacs
вы увидите процесс с командной строкой emacs --daemon
. Проблема, с которой я столкнулся, заключалась в том, что Emacs запускается только в терминале, если вы делаете это так, поэтому, если вы хотите запустить его в графическом окне, читайте дальше ... (и сначала убейте этот процесс-демон)
Вот что я добавил в свой .bashrc:
alias e='emacsclient --no-wait --alternate-editor ~/.emacs.d/start.sh'
и содержимое ~/.emacs.d/start.sh
:
#!/bin/sh
emacs --eval '(server-start)' $* &
Затем псевдоним e
можно использовать для открытия файла, либо запустив новый экземпляр Emacs (с сервером), либо используя существующий.
Для команды редактора, которая ждет, пока вы не закончите работу с файлом (хорошо для коммитов Git и т.д.), Удалите опцию --no-wait
. Я делаю это в моем .bashrc:
export EDITOR='emacsclient --alternate-editor ~/.emacs.d/start.sh'
Используйте C-x #
когда закончите редактирование файла. Старый добрый C-x k
задаст надоедливый вопрос: «У буфера foo.txt еще есть клиенты; убить его?"