Vor kurzem war ich RZeuge der intelligenten Einführung des Rohrleitungsbetreibers %>%oder then-betreibers in Code, den ich heutzutage ziemlich häufig verwende. Ich frage mich, ob dies bereits in der neuesten Version von ESS implementiert wurde . Wenn nicht, sollte es kein Problem sein, elispCode zum Schreiben einer Funktion dafür zu finden. Ich muss dies implementieren, damit es diesen Operator druckt %>%und dann zu einer neuen eingerückten Zeile springt.
MWE
library(ggplot2)
library(dplyr)
diamonds %>%
filter(cut=="Ideal") %>%
ggplot(aes(price)) +
geom_histogram() +
facet_wrap (~ color)
Mein Elisp-Prozess - in .init.eloder .emacsDatei:
(defun then_R_operator ()
"%>% operator or 'then' pipe operator"
(interactive)
(insert " %>%") ; note the space before the first %
(reindent-then-newline-and-indent))
(global-set-key (kbd "C-%") 'then_R_operator)
Es funktioniert, aber ich möchte überprüfen, ob etwas nicht stimmt oder ob es Verbesserungsvorschläge gibt (ein Neuling in Elisp zu sein). Wie kann ich dies nur auf den ESSModus beschränken?
Hinweis
Ich habe festgestellt, dass das Sperren von Schriftarten %>%durch Aktivieren ess-fl-keyword:operatorsüber das ESS-Menü erfolgen kann.
inferior...und ess-mode...?
ess-modeAktiviert sich beim Bearbeiten von zB .RDateien. inferior-ess-modeWird aktiviert, wenn ein interaktiver RProzess in Emacs ausgeführt wird (dh über den RBefehl oder mit C-c C-zwelchen Aufrufen ess-switch-to-inferior-or-script-buffer).
inferior..., kann ich ihn in der interaktiven R-Konsole verwenden, die sich in Emacs befindet? Wenn ja, dann denke ich, wäre es besser, Schlüssel für beide zu definieren, ess-modeund inferior?
(just-one-space 1)vor der Pipe um den Space-Charakter kümmern . Sie möchten dasess-mode-map(und wahrscheinlich dasinferior-ess-mode-map) verwenden, um den Schlüssel mit zu setzen(define-key ess-mode-map (kbd "C-%") 'then_R_operator).