Doom-emacs: [HOWTO] Определите пользовательскую команду evil ex

Созданный на 12 сент. 2019  ·  3Комментарии  ·  Источник: hlissner/doom-emacs

Чего я хочу добиться
Поскольку я неуклюже отпускаю shift, я хочу добавить версию с заглавными буквами ': w' и ': q' к командам evil ex

Я пробовал пока:

;;doom.d/config.el
(evil-ex-define-cmd "W" #'write)
;;doom.d/config.el
(after! evil 
  (evil-ex-define-cmd "W" #'write)
)

После перезапуска emacs и ввода :W оба по-прежнему приводят к

Неизвестная команда: "W"

Еще пробовал after! evil-ex и after! evil-ex-cmd , без радости

Системная информация


((emacs
(версия. "26.2")
(функции. "XPM JPEG TIFF GIF PNG RSVG IMAGICK SOUND GPM DBUS GSETTINGS GLIB NOTIFY LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XDBE XDBE МОДУЛЬ XDBE XDBE
(сборка «12 апр, 2019»)
(buildopts "--build = x86_64-linux-gnu --prefix = / usr '--includedir = $ {prefix} / include' '--mandir = $ {prefix} / share / man' '--infodir = $ {префикс} / share / info '--sysconfdir = / etc --localstatedir = / var --disable-silent-rules' --libdir = $ {prefix} / lib / x86_64-linux-gnu '' --libexecdir = $ {prefix} / lib / x86_64-linux-gnu '--disable-keeper-mode --disable-dependency-tracking --prefix = / usr --sharedstatedir = / var / lib --program-suffix = 26 - with-modules --with-file-notification = inotify --with-mailutils --with-x = yes --with-x-toolkit = gtk3 --with-xwidgets --with-lcms2 'CFLAGS = -g -O2 -fdebug-prefix-map = / build / emacs26-CYbeHB / emacs26-26.2 ~ 1.gitfd1b34b =. -fstack-protector-strong -Wformat -Werror = format-security -no-pie '' CPPFLAGS = -Wdate-time - D_FORTIFY_SOURCE = 2 '' LDFLAGS = -Wl, -Bsymbolic-functions -Wl, -z, relro -no-pie '"))
(рок
(версия. "2.0.9")
(сборка "ГОЛОВА -> разработка, происхождение / развитие, происхождение / ГОЛОВА a16838b7 2019-09-11 23:42:27 -0400"))
(система
(введите. gnu / linux)
(конфигурация "x86_64-pc-linux-gnu")
(оболочка. "/ bin / bash")
(uname. "Linux 4.15.0-62-generic # 69-Ubuntu SMP, среда, 4 сентября 20:55:53 UTC 2019 x86_64")
(путь "~ / .cargo / bin" "~ / bin" "~ / .local / bin" "/ usr / local / bin" "~ / .cargo / bin" "~ / .local / bin" "~ / bin "" / usr / local / sbin "" / usr / local / bin "" / usr / sbin "" / usr / bin "" / sbin "" / bin "" / usr / games "" / usr / local / games "" / snap / bin "" ~ / .fzf / bin "" /usr/lib/x86_64-linux-gnu/emacs/26.2/x86_64-linux-gnu "))
(конфигурация
(envfile. envvar-файл)
(elc-файлы. 0)
(модули: завершение компании ivy: ui doom doom-dashboard hl-todo modeline nav-flash ophints (popup + all + defaults) vc-gutter vi-tilde-fringe рабочие области выбора окна: редактор злых файлов-шаблонов свернуть несколько курсоров повернуть -text snippets: emacs dired electric vc: tools eval flycheck (lookup + docsets) magit: lang data emacs-lisp markdown (org + dragndrop + ipython + pandoc + present) python rest sh: config по умолчанию)
(пакеты "org-caldav" "calfw" "calfw-org" "(ttl-mode: recipe (: host github: repo jeeger / ttl-mode))")
(elpa-пакеты "н / д")))

question elisp resolved

Самый полезный комментарий

Ах, в этом случае это произошло потому, что "write" - это строка, а #'write - это символ. evil-ex-define-cmd обрабатывает строки как команды ex для выполнения, а символы как ссылки на функции elisp. Вам нужно будет сделать:

;;doom.d/config.el
(evil-ex-define-cmd "W" "write")

Все 3 Комментарий

Ваш первый фрагмент правильный:

;;doom.d/config.el
(evil-ex-define-cmd "W" #'write)

Однако функция write не существует. Вам нужно было evil-write :

;;doom.d/config.el
(evil-ex-define-cmd "W" #'evil-write)

Большое спасибо! Меня ввело в заблуждение значение evil-ex-commands :

...
("write" . evil-write)
("w" . "write")
...

Здесь кажется, что w просто ссылается на write , что, похоже, не работает, когда я делаю это через evil-ex-define-cmd

Ах, в этом случае это произошло потому, что "write" - это строка, а #'write - это символ. evil-ex-define-cmd обрабатывает строки как команды ex для выполнения, а символы как ссылки на функции elisp. Вам нужно будет сделать:

;;doom.d/config.el
(evil-ex-define-cmd "W" "write")
Была ли эта страница полезной?
0 / 5 - 0 рейтинги