ESSモードでパイピング演算子%>%を実装する方法は?


8

最近、私が最近非常に頻繁に使用するコードRでのパイプ演算子%>%またはthen演算子のスマートな導入を目撃しました。これは、ESSの最新バージョンですでに実装されているのでしょうか。そうでない場合でも、そのelispための関数を作成するコードを考え出すことは問題になりません。これを実装して、その演算子%>%を出力してから、インデントされた新しい行にジャンプするようにする必要があります。

MWE

library(ggplot2)
library(dplyr)    
diamonds %>%
      filter(cut=="Ideal") %>%
      ggplot(aes(price)) +
      geom_histogram() +
      facet_wrap (~ color)

私のelispトライアル-で.init.elまたは.emacsファイル:

(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)  

動作しますが、何か問題があるかどうか、またはそれを改善するための提案(elispの初心者)があるかどうかを確認したいと思います。これをESSモードのみに制限する方法は?

メモの
フォントロックは、ESSメニューから%>%有効にすることで実行できることに気付きましたess-fl-keyword:operators


(just-one-space 1)パイプの前にあるスペース文字に注意します。を使用してキーを設定しますess-mode-map(適切にはinferior-ess-mode-map(define-key ess-mode-map (kbd "C-%") 'then_R_operator)
mutbuerger、2015

ありがとう!2つの違いは何ですか:inferior...ess-mode...
博士号

ess-mode.Rファイルなどの編集時に自分自身をアクティブにします。Emacs内でinferior-ess-mode対話型Rプロセスを実行するときにアクティブ化されます(つまり、Rコマンドを使用するか、C-c C-zと呼び出しますess-switch-to-inferior-or-script-buffer)。
2015

@undostresありがとう。これでこの演算子のキーを定義したい場合、inferior...これにより、Emacs内にあるインタラクティブなRコンソールでそれを使用できますか?はいの場合、ess-modeとの両方にキーを定義する方が良いと思いますinferiorよね?
博士号

@doctorateはい。
2015

回答:


8

役立つコメントを寄せてくれたmutbuergerに感謝します。現在、私はこの演算子をESSでのみ使用するために使用しています。

(defun then_R_operator ()
  "R - %>% operator or 'then' pipe operator"
  (interactive)
  (just-one-space 1)
  (insert "%>%")
  (reindent-then-newline-and-indent))
(define-key ess-mode-map (kbd "C-%") 'then_R_operator)
(define-key inferior-ess-mode-map (kbd "C-%") 'then_R_operator)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.