O que eu quero alcançar
Como sou desajeitado para liberar o shift, quero adicionar a versão em maiúscula de ': w' e ': q' aos ex comandos malignos
Eu tentei até agora:
;;doom.d/config.el
(evil-ex-define-cmd "W" #'write)
;;doom.d/config.el
(after! evil
(evil-ex-define-cmd "W" #'write)
)
Depois de reiniciar o emacs e inserir :W
, ambos ainda resultam em
Comando desconhecido: '' W "
Eu também tentei after! evil-ex
e after! evil-ex-cmd
, sem alegria
Informação do sistema
((emacs
(versão. "26,2")
(recursos. "XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOM GPM DBUS GSETTINGS GLIB NOTIFICAR LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES LIBESTEM DE LIBXSTEM LIBXML2 XDBE XIM)
(compilação "12 de abril de 2019")
(buildopts "--build = x86_64-linux-gnu --prefix = / usr '--includedir = $ {prefix} / include' '--mandir = $ {prefix} / share / man' '--infodir = $ {prefix} / 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 '"))
(ruína
(versão. "2.0.9")
(build. "HEAD -> desenvolver, originar / desenvolver, origem / HEAD a16838b7 2019-09-11 23:42:27 -0400"))
(sistema
(digite. gnu / linux)
(config. "x86_64-pc-linux-gnu")
(shell. "/ bin / bash")
(uname. "Linux 4.15.0-62-generic # 69-Ubuntu SMP Quarta-feira 4 de setembro 20:55:53 UTC 2019 x86_64")
(caminho "~ / .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 / jogos "" / snap / bin "" ~ / .fzf / bin "" /usr/lib/x86_64-linux-gnu/emacs/26.2/x86_64-linux-gnu "))
(config
(envfile. envvar-file)
(arquivos elc. 0)
(módulos: completação empresa ivy: ui doom doom-painel hl-todo modeline nav-flash ophints (pop-up + todos + padrões) vc-gutter vi-tilde-fringe janela-selecionar espaços de trabalho: editor arquivos malvados modelos dobrar cursores múltiplos girar -trechos de texto: emacs dired electric vc: tools eval flycheck (lookup + docsets) magit: lang data emacs-lisp markdown (org + dragndrop + ipython + pandoc + present) python rest sh: config default)
(pacotes "org-caldav" "calfw" "calfw-org" "(ttl-mode: recipe (: host github: repo jeeger / ttl-mode))")
(elpa-packages "n / a")))
Seu primeiro snippet está correto:
;;doom.d/config.el
(evil-ex-define-cmd "W" #'write)
No entanto, a função write
não existe. O que você queria era evil-write
:
;;doom.d/config.el
(evil-ex-define-cmd "W" #'evil-write)
Muito obrigado! Fui enganado sobre o valor de evil-ex-commands
:
...
("write" . evil-write)
("w" . "write")
...
Aqui parece que w
apenas faz referência a write
, o que parece não funcionar quando faço isso via evil-ex-define-cmd
Ah, nesse caso era porque "write"
é uma string e #'write
é um símbolo. evil-ex-define-cmd
trata strings como comandos ex para executar e símbolos como referências a funções elisp. Você teria que fazer:
;;doom.d/config.el
(evil-ex-define-cmd "W" "write")
Comentários muito úteis
Ah, nesse caso era porque
"write"
é uma string e#'write
é um símbolo.evil-ex-define-cmd
trata strings como comandos ex para executar e símbolos como referências a funções elisp. Você teria que fazer: