Gần đây, Rchứng kiến sự giới thiệu thông minh của toán tử %>%hoặc toán tử đường ống thentrong mã mà tôi sử dụng khá thường xuyên hiện nay. Tôi tự hỏi nếu điều này đã được thực hiện trong phiên bản mới nhất của ESS . Nếu không, sẽ không có vấn đề gì khi đưa ra elispmã để viết hàm cho nó. Tôi cần phải thực hiện điều này để nó sẽ in toán tử %>%đó và sau đó nhảy sang một dòng thụt lề mới.
MWE
library(ggplot2)
library(dplyr)
diamonds %>%
filter(cut=="Ideal") %>%
ggplot(aes(price)) +
geom_histogram() +
facet_wrap (~ color)
Thử nghiệm elisp của tôi - trong .init.elhoặc .emacstập tin:
(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)
Nó hoạt động, nhưng tôi muốn kiểm tra xem có gì sai với nó hay có bất kỳ đề xuất nào để cải thiện nó (là một người mới trong elisp). Làm thế nào để hạn chế điều này chỉ với ESSchế độ?
Lưu ý
Tôi nhận ra rằng việc khóa phông chữ %>%có thể được thực hiện bằng cách bật ess-fl-keyword:operatorstừ menu ESS.
inferior...và là ess-mode...gì?
ess-modekích hoạt chính nó khi chỉnh sửa, ví dụ, .Rcác tập tin. inferior-ess-modekích hoạt khi chạy một Rquá trình tương tác bên trong Emacs (tức là thông qua Rlệnh hoặc với lệnh C-c C-zgọi nào ess-switch-to-inferior-or-script-buffer).
inferior...này thì điều này sẽ cho phép tôi sử dụng nó trong bảng điều khiển R tương tác, nằm trong Emacs? Nếu có thì tôi nghĩ sẽ tốt hơn nếu xác định khóa cho cả hai ess-modevà inferior, phải không?
(just-one-space 1)trước ống. Bạn muốn sử dụngess-mode-map(và có thể làinferior-ess-mode-map) để đặt khóa(define-key ess-mode-map (kbd "C-%") 'then_R_operator).