Я знаю, что emacs часто считают ОС, но ... s / reboot / restart /?
Уильям Перселл
6
Я не разработчик, поэтому многие ответы, которые имеют смысл сразу для разработчиков, не так много значат для меня
Yazz.com
4
@MJB цель переполнения стека - быть хранилищем знаний даже для самых основных вопросов. Этот вопрос идеально подходит для переполнения стека. Пожалуйста, смотрите stackoverflow.com/faq
ха-ха, спустя пять лет, предложенный "поиск Google сначала" приводит сюда! приятно
JimLohse
Ответы:
350
Вы можете использовать команду load-file ( M-xload-file, затем дважды нажать return, чтобы принять имя файла по умолчанию, которое является текущим редактируемым файлом).
Вы также можете просто переместить точку в конец любого sexp и нажать, C-xC-eчтобы выполнить только этот sexp. Обычно нет необходимости перезагружать весь файл, если вы просто меняете одну или две строки.
Имейте в виду, что это не всегда может делать именно то, что вы думаете. Если у вас есть переменные, содержимое которых перехвачено (т. Е. Устанавливается логическое значение противоположное), то поведение не будет таким же, как при загрузке файла.
Холлида
4
Любые побочные эффекты в целом могут нарушить желаемое поведение: загрузка файлов и т. Д.
vemv
Когда я делаю это, я получаю сообщение: load-with-code-преобразование: значение символа как переменная void: n
Крис Мари
2
Вместо перемещения точки за defunили defvarвы также можете оставить ее внутри тела и типа объявления C-M-x. Очень кстати.
Томас,
151
Очень странно что очень удобно
M-xeval-buffer
здесь не упоминается
Он сразу оценивает весь код в буфере, это самый быстрый метод, если ваш .emacsидемпотент.
Кто сказал, что .emacsэто (или должно быть) идемпотент?
микрофон
@mike: не я. «Учитывая a, b верно», означало для меня «если a, b верно», но я понимаю, что вы имеете в виду. Я изменяю данные, если для большей ясности.
Питер
7
@mike: Когда имело бы смысл .emacsне быть идемпотентом?
Заз
Я бы подумал, что это будет первое предложение.
Страйкер
1
Я бы не сказал, что это хороший стиль, но это может случиться. Например, вы можете не переопределять функцию, если она уже определена (из первого запуска). Вы можете не увидеть изменения в его определении при оценке вашего файла инициализации.
Калигуле
43
Обычно вы можете просто переоценить измененный регион. Отметьте область ~ / .emacs, которую вы изменили, и затем используйте M-x eval-region RET. Это часто безопаснее, чем переоценка всего файла, поскольку легко написать файл .emacs, который не работает сразу после двойной загрузки.
Интересно. Я не рассматривал идею файла .emacs, который не был идемпотентным. Что-то, на что стоит обратить внимание, когда я начну с ELisp
Эрик
2
Я полагаю, что редко встречается файл .emacs, который является идемпотентом, по крайней мере, в строгом смысле двух выполнений, приводящих к точно такому же состоянию, что и одно выполнение. По крайней мере, достаточно часто добавлять в различные списки, часто таким образом, чтобы не подавлять повторяющиеся записи при повторном выполнении.
Дейл Хэгглунд
1
Еще одна мысль: используя подход, который я предлагаю выше, возможно, что состояние emacs, которое вы получили, не то, что фактически делает ваш .emacs. Т.е., поскольку вы не выполнили весь файл .emacs с чистого листа, вы на самом деле не знаете, что он делает то, что вам нужно.
Дейл Хэгглунд
1
При этом нельзя ли написать .emacs идемпотентным способом? Глобальное состояние неприглядное.
Эхтеш Чоудхури
39
Если у вас есть файл .emacs, открытый в текущем активном буфере:
Здесь следует помнить одну вещь: это может не привести вас в состояние, идентичное подходу перезапуска. (Придуманный пример: если у вас был эффект «переключения» в ваших .emacs).
такое M-:> Ctrl Alt x? исходя из вашей логики я представляю M-: <CMx, когда изменяется только одна строка в файле инициализации? Может быть, это просто ==
Роберт Хоутон
12
Другие уже ответили на ваш вопрос, как указано, но я нахожу, что я обычно хочу выполнить строки, которые я только что написал. для этого CtrlAltxв lisp работает просто отлично.
С C-M-x, вам не нужно быть "в конце" - вы думаете о чем-то C-x C-e? Приятно то, C-M-xчто вы можете вызывать его, даже когда точка находится в середине объявления функции / переменной.
Томас
Я, вероятно, вошел в привычку ходить до конца lisp в то время, когда я использовал только Cx Ce. Спасибо за улов!
Bahbar
9
Я предлагаю, чтобы вы не делали этого изначально. Вместо этого, запустите новый сеанс emacs и проверьте все внесенные вами изменения, чтобы убедиться, что они работают правильно. Причина сделать это таким образом, чтобы не оставлять вас в состоянии, когда у вас есть неработоспособный файл .emacs, который не загружается или не загружается чисто. Если вы выполняете все свои редактирования в исходном сеансе и все тесты в новом сеансе, у вас всегда будет что-то надежное, чтобы закомментировать некорректный код.
Когда вы, наконец, довольны своими изменениями, продолжайте и используйте один из других ответов для повторной загрузки. Я лично предпочитаю evalтолько тот раздел, который вы добавили / изменили, и для этого просто выделите область добавленного / измененного кода и вызова M-x eval-region. Это минимизирует оцениваемый код, сводя к минимуму любые непреднамеренные побочные эффекты, как указывает luapyad.
Я в настоящее время на Ubuntu 15.04; Мне нравится определять ключ для этого.
[M-insert] переводится как alt-insert на моей клавиатуре.
Поместите это в ваш файл .emacs:
Хотя M-x eval-bufferсработает, у вас могут возникнуть проблемы с переключателями и другими подобными вещами. Лучшим подходом может быть «пометить» или выделить что-то новое в вашем .emacs (или даже в чистом буфере, если вы просто возитесь), а затем M-x eval-region. Надеюсь это поможет.
Вот быстрый и простой способ быстро проверить вашу конфигурацию. Вы также можете использовать C-x C-eв конце определенного lisp, чтобы выполнить определенную функцию индивидуально.
Cx Ce запускает команду eval-last-sexp (находится в global-map), которая является интерактивной скомпилированной функцией Lisp.
Это связано с Cx Ce.
(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)
Оцените sexp до точки; вывести значение в области эха. Интерактивно, с префиксным аргументом, выведите выходные данные в текущий буфер.
Обычно эта функция усекает длинный вывод в соответствии со значением переменных «eval-expression-print-length» и «eval-expression-print-level». Однако с нулевым аргументом префикса такого усечения нет. Такой префиксный аргумент также заставляет целые числа печататься в нескольких дополнительных форматах (восьмеричный, шестнадцатеричный и символьный).
Если 'eval-expression-debug-on-error' не равно nil, что является значением по умолчанию, эта команда организует все ошибки для входа в отладчик.
Вопрос в том, как это сделать без перезапуска Emacs. Запуск новой копии, хотя и технически отвечая на вопрос, похоже, не соответствует духу вопроса. Ch
чарр
0
Вы можете установить привязку ключей для Emacs, как это
Ответы:
Вы можете использовать команду load-file ( M-x
load-file
, затем дважды нажать return, чтобы принять имя файла по умолчанию, которое является текущим редактируемым файлом).Вы также можете просто переместить точку в конец любого sexp и нажать, C-xC-eчтобы выполнить только этот sexp. Обычно нет необходимости перезагружать весь файл, если вы просто меняете одну или две строки.
источник
defun
илиdefvar
вы также можете оставить ее внутри тела и типа объявленияC-M-x
. Очень кстати.Очень странно что очень удобно
M-x
eval-buffer
здесь не упоминается
Он сразу оценивает весь код в буфере, это самый быстрый метод, если ваш
.emacs
идемпотент.источник
.emacs
это (или должно быть) идемпотент?.emacs
не быть идемпотентом?Обычно вы можете просто переоценить измененный регион. Отметьте область ~ / .emacs, которую вы изменили, и затем используйте
M-x eval-region RET
. Это часто безопаснее, чем переоценка всего файла, поскольку легко написать файл .emacs, который не работает сразу после двойной загрузки.источник
Если у вас есть файл .emacs, открытый в текущем активном буфере:
источник
источник
Следующее должно сделать это ...
источник
решение
M-:
(load user-init-file)
ноты
Eval:
быстро (включая скобки)user-init-file
переменная, содержащая~/.emacs
значение (указывающее на путь к файлу конфигурации) по умолчанию(load)
это более короткая, старая и неинтерактивная версия(load-file)
; это не команда emacs (для M-xввода), а простая функция elispвывод
M-:
>M-x
источник
Другие уже ответили на ваш вопрос, как указано, но я нахожу, что я обычно хочу выполнить строки, которые я только что написал. для этого CtrlAltxв lisp работает просто отлично.
источник
eval-lastsexp
, вC-x C-e
C-M-x
, вам не нужно быть "в конце" - вы думаете о чем-тоC-x C-e
? Приятно то,C-M-x
что вы можете вызывать его, даже когда точка находится в середине объявления функции / переменной.Я предлагаю, чтобы вы не делали этого изначально. Вместо этого, запустите новый сеанс emacs и проверьте все внесенные вами изменения, чтобы убедиться, что они работают правильно. Причина сделать это таким образом, чтобы не оставлять вас в состоянии, когда у вас есть неработоспособный файл .emacs, который не загружается или не загружается чисто. Если вы выполняете все свои редактирования в исходном сеансе и все тесты в новом сеансе, у вас всегда будет что-то надежное, чтобы закомментировать некорректный код.
Когда вы, наконец, довольны своими изменениями, продолжайте и используйте один из других ответов для повторной загрузки. Я лично предпочитаю
eval
только тот раздел, который вы добавили / изменили, и для этого просто выделите область добавленного / измененного кода и вызоваM-x eval-region
. Это минимизирует оцениваемый код, сводя к минимуму любые непреднамеренные побочные эффекты, как указывает luapyad.источник
Сочетание клавиш:
источник
источник
Я в настоящее время на Ubuntu 15.04; Мне нравится определять ключ для этого.
[M-insert] переводится как alt-insert на моей клавиатуре.
Поместите это в ваш файл .emacs:
источник
Определите его в вашем файле инициализации и вызовите через Mx reload-user-init-file
источник
Хотя
M-x eval-buffer
сработает, у вас могут возникнуть проблемы с переключателями и другими подобными вещами. Лучшим подходом может быть «пометить» или выделить что-то новое в вашем .emacs (или даже в чистом буфере, если вы просто возитесь), а затемM-x eval-region
. Надеюсь это поможет.источник
Вот быстрый и простой способ быстро проверить вашу конфигурацию. Вы также можете использовать
C-x C-e
в конце определенного lisp, чтобы выполнить определенную функцию индивидуально.источник
Помимо команд, таких как Mx eval-buffer или Mx load-file, вы можете перезапустить свежий emacs из командной строки:
Пример использования stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
источник
Вы можете установить привязку ключей для Emacs, как это
Надеюсь, это поможет!
источник
Если вам случится открыть оболочку внутри Emacs, вы также можете сделать:
Может сохранить несколько нажатий клавиш.
источник