Vor kurzem war ich R
Zeuge 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, elisp
Code 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.el
oder .emacs
Datei:
(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 ESS
Modus beschränken?
Hinweis
Ich habe festgestellt, dass das Sperren von Schriftarten %>%
durch Aktivieren ess-fl-keyword:operators
über das ESS-Menü erfolgen kann.
(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)
.inferior...
undess-mode...
?ess-mode
Aktiviert sich beim Bearbeiten von zB.R
Dateien.inferior-ess-mode
Wird aktiviert, wenn ein interaktiverR
Prozess in Emacs ausgeführt wird (dh über denR
Befehl oder mitC-c C-z
welchen Aufrufeness-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-mode
undinferior
?Antworten:
danke an mutbuerger für die hilfreichen kommentare. Derzeit verwende ich dies für diesen Operator, um nur mit ESS zu arbeiten.
quelle