6

Другими словами, могу ли я запустить emacs один раз, и всякий раз, когда я набираю emacs в терминале, он открывается как буфер в моем существующем экземпляре emacs?

2 ответа2

5

Да.

Как вы это сделаете, зависит от операционной системы и версии emacs (XEmacs, GNU emacs), которую вы используете. Хорошее место для начала - взглянуть на GnuClient и EmacsClient.

5

[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 еще есть клиенты; убить его?"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .