Злой режим имеет непредсказуемое поведение при использовании компиляции

#emacs #compilation #evil-mode

Вопрос:

У меня есть эта проблема, когда всякий раз, когда я запускаю команду компиляции, злой режим создает новое окно вместо использования окон на экране, которые обычная команда компиляции будет или она будет компилироваться в текущем окне, в котором я нахожусь.

Возьмите следующие изображения в качестве примеров: Без режима зла, если у меня открыто 2 окна, разделенных, и я нахожусь в окне слева, и я запускаю M-x compile и указываю аргумент (предположим, что это будет вызванный пакетный сценарий build.bat ), emacs будет использовать экран справа, как показано на этом изображении:

https://i.stack.imgur.com/LeoMm.png

.emacs-это:

 (require 'ido)
(require 'compile)
(ido-mode t)

; Compilation
(defun make-without-asking ()
  (interactive)
  (switch-to-buffer-other-window "*compilation*")
  (compile "build.bat")
  (other-window 1))
(define-key global-map "em" 'make-without-asking)

(add-to-list 'default-frame-alist '(font . "Liberation Mono-11.5"))
(set-face-attribute 'default t :font "Liberation Mono-11.5")
(set-face-attribute 'font-lock-builtin-face nil :foreground "#DAB98F")
(set-face-attribute 'font-lock-comment-face nil :foreground "gray50")
(set-face-attribute 'font-lock-constant-face nil :foreground "olive drab")
(set-face-attribute 'font-lock-doc-face nil :foreground "gray50")
(set-face-attribute 'font-lock-function-name-face nil :foreground "burlywood3")
(set-face-attribute 'font-lock-keyword-face nil :foreground "DarkGoldenrod3")
(set-face-attribute 'font-lock-string-face nil :foreground "olive drab")
(set-face-attribute 'font-lock-type-face nil :foreground "burlywood3")
(set-face-attribute 'font-lock-variable-name-face nil :foreground "burlywood3")

  (menu-bar-mode -1)
  (set-foreground-color "burlywood3")
  (set-background-color "#161616")
  (set-cursor-color "#40FF40")
 

Однако, как только я добавляю злой режим, поведение становится непредсказуемым, так как иногда оно создает новое окно или компилируется в окне, в котором я нахожусь.
В следующем примере я нахожусь в окне справа с включенным режимом зла, и когда я запускаю M-x compile в build.bat качестве аргумента (как и раньше), режим зла компилирует код и показывает *compilation* буфер в том же окне вместо использования окна слева:

https://i.stack.imgur.com/MdNpg.png

.emacs с включенным режимом » зло » — это:

 (require 'package)

(setq package-archives '(("melpa" . "https://melpa.org/packages/")
                         ("gnu" . "https://elpa.gnu.org/packages/")))
(require 'package)

(package-initialize)

(unless package-archive-contents
  (package-refresh-contents))

(setq package-selected-packages '(evil))
(package-install-selected-packages)

(require 'ido)
(require 'compile)
(require 'evil)
(evil-mode 1)
(ido-mode t)

; Compilation
(defun make-without-asking ()
  (interactive)
  (switch-to-buffer-other-window "*compilation*")
  (compile "build.bat")
  (other-window 1))
(define-key global-map "em" 'make-without-asking)

(add-to-list 'default-frame-alist '(font . "Liberation Mono-11.5"))
(set-face-attribute 'default t :font "Liberation Mono-11.5")
(set-face-attribute 'font-lock-builtin-face nil :foreground "#DAB98F")
(set-face-attribute 'font-lock-comment-face nil :foreground "gray50")
(set-face-attribute 'font-lock-constant-face nil :foreground "olive drab")
(set-face-attribute 'font-lock-doc-face nil :foreground "gray50")
(set-face-attribute 'font-lock-function-name-face nil :foreground "burlywood3")
(set-face-attribute 'font-lock-keyword-face nil :foreground "DarkGoldenrod3")
(set-face-attribute 'font-lock-string-face nil :foreground "olive drab")
(set-face-attribute 'font-lock-type-face nil :foreground "burlywood3")
(set-face-attribute 'font-lock-variable-name-face nil :foreground "burlywood3")

  (menu-bar-mode -1)
  (set-foreground-color "burlywood3")
  (set-background-color "#161616")
  (set-cursor-color "#40FF40")
 

Ответ №1:

Я просто переключился на neovim и настроил эту функцию с помощью vimscript, это было намного проще.