LINUX.ORG.RU

История интерактивных команд в Emacs

 ,


2

3

Переезжаю потихоньку с Vim на Emacs (+evil), в целом доволен - фич больше и работают они лучше, хотя конфигурировать его кратно сложнее для меня пока. В качестве starter kit взял Doom (develop branch) и доволен - он намного понятнее и легче Spacemacs.

Но появилась заноза. В emacs часто работа с интерактивной командой выглядит как M-x набор команды с Helm <RET> параметр в Helm <RET>, например:

M-x man <RET> bash <RET>
M-x customize-variable <RET> fill-column <RET>
M-x cd <RET> path <RET>

И это неудобно. Хочется иметь возможность:
1. Вернуться из второго интерактивного уровня в первый, т.е. отредатировать команду man, cd, etc.
2. «Перемещаться по истории команд» как в виме с ":<c-p>" - вернёт старую команду и даст мне её отредактировать. В случае с emacs я вижу это так:
M-x cd <RET> /some/long/path/to/dir <C-g>
M-x "жму волшебный хоткей" - емакс переключает меня в "cd" и подставляет /some/long/path/to/dir в Helm. 

Желательно чтобы работало в общем случае, а не отдельно для каждой интерактивной команды. Есть такое в природе?

UPD: в doom/evil есть какая-то эмуляция ":" в minibuffer, но аргументы там не работают. ":man bash" открывает просто «M-x man <RET>» и даже bash туда не подставляет.

★★★★★

Последнее исправление: snizovtsev (всего исправлений: 1)

Нашёл C-x ESC ESC «repeat-complex-command», но оно не интегрируется с helm.

snizovtsev ★★★★★
() автор топика
Ответ на: комментарий от SL_RU

Это показывает историю в helm, но не позволяет её интерактивно отредактировать. Например, заменить man systemd на man systemd-cgls так, чтобы это было интерактивно видно в списке.

snizovtsev ★★★★★
() автор топика
Ответ на: комментарий от snizovtsev

Ещё нашёл helm-resume - почти что нужно, но я не понял логики. Он восстанавливает более старую сессию, чем была в последний раз.

snizovtsev ★★★★★
() автор топика

Интерактивные команды на то и интерактивные, что они предполагают ввод от пользователя. Там можно крутить историю через alt-p/alt-n но в целом, то что ты хочешь делается по-другому. А именно - пиши свои команды в *scratch* на лиспе и выполняй через C-x-e. Редактируй там как душе угодно.

Например

(man "bash")

;; Замена в буфере
(save-excursion 
  (set-buffer "server.js") 
  (replace-string "this" "that"))

Для удобства накати eldoc и ac-mode.

оно не интегрируется с helm

Это потому что helm ряд значений считывает просто через ввод, а не через параметры. Иначе инкрементальный поиск не получится.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)

evil

Забыл сказать... Не страдай фигнёй.

no-such-file ★★★★★
()

Но если нужна более «классическая» строка ввода, в вашем случае скорее подойдёт M-: (альт-шифт-;) Оно же — M-x, eval-expression.

Пример ввода:

(cd "~/")
(man "bash")

(не уверен, как это сочетается с helm)

Возможно, есть вариант поиграться с настройкой savehist.

raven_cler ★★
()

Я вижу это так:

Вариант #1: M-x ielm

Вариант #2: держать открытым файл и набирать/исполнять команды в нем.

В варианте #2 советую org mode babel для организации кода.

Ritmik
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.