Как я могу вызвать `: vsp` в скрипте Emacs Lisp?

#emacs #evil-mode

#emacs #злой режим

Вопрос:

Представьте, что у меня есть сценарий Emacs Lisp, который я выполняю с помощью M-x eval-buffer . В этом скрипте я хочу вызвать :vsp (вертикальное разделение) несколько раз.

Как я могу сделать это программно?

C-h k приводит меня к команде evil-ex. Однако я не могу найти там ничего подобного vsp или split .

Обновление 1:

Я нашел evil-window-vsplit в evil-commands.el.

Однако это работает не так :vsp . Если я выполню скрипт

 (evil-window-split)
(evil-window-vsplit)
(evil-window-down 1)
 

окно выглядит так, как показано ниже.

Фактический результат (скриншот)

Если я выполняю команды C-w s , :vsp , и C-w j вручную, результат будет таким:

Ожидаемый результат

Обновление 2: похоже (evil-window-down 1) , это вызывает проблему.

Вот почему: если я запускаю скрипт

 (evil-window-split)
(evil-window-vsplit)
(evil-window-vsplit)
 

Я получаю правильный результат (окно разделено по горизонтали на две части, верхние части разделены на три части). Нижняя часть не разделяется, потому что в скрипте нет команд для ее разделения.

Скриншот без перехода к нижнему окну

Затем я добавляю команду для перехода к нижней части горизонтального разделения ( (evil-window-down 1) , эквивалент C-w j ):

 (evil-window-split)
(evil-window-vsplit)
(evil-window-vsplit)
(evil-window-down 1)
 

Этот скрипт выдает неправильный результат: не только верхняя половина разделяется на три части (как и должно быть), но и нижняя (ее не следует разделять).

Скриншот, показывающий окна Emacs после запуска скрипта с переходом к нижней части

Обновление 3: вышеуказанная ошибка не возникает, если я выполняю скрипт с помощью M-x load-file .

Комментарии:

1. Хм, интересно. Если вы выполняете эти три команды по отдельности, это дает результат, который вы ищете. Но результирующий макет окна изменится, если вы eval-buffer . РЕДАКТИРОВАТЬ: это работает, если вы вводите три команды progn .

2. Удаление (evil-window-down 1) также делает эту работу из eval-buffer . Странно.