Rの2重xapply()をvimで綺麗に整形する方法が知りたいです

投稿者: Anonymous

vimRを書くのにvim-scripts/Vim-R-pluginを利用しています。しかし、

sapply(dfs, function(df) {
  sapply(1:5, function(i) {
    do.something(df, i)
  })
})

というコードがあったとして(あくまで例なので「do.somethingに1:5をベクトルで渡せば」という話は脇に置いてください)、vimでインデントしようとすると

sapply(dfs, function(df) {
  sapply(1:5, function(i) {
    do.something(df, i)
})
})

のように内側の閉じ括弧が行頭に来てしまいます。内側のfunctionを改行すると、閉じ括弧の問題は解消しますが、個人的にはfunctionで改行したくはありません。

sapply(dfs, function(df) {
  sapply(1:5, 
    function(i) {
      do.something(df, i)
    })
})

Rvimから触っている方も多いとは思いますが、どのように解決しているのでしょうか。別のプラグインを使う、設定が間違っているなど、ご教示いただければと思います。


役に立つ情報かわかりませんが、関連する.vimrcの設定は以下のとおりです。(主にアロー演算子にまつわる問題を回避するための設定)

これらをコメントアウトしても現象は改善しません。

let r_indent_align_args = 0
let r_indent_ess_comments = 0
let r_indent_ess_compatible = 0
let vimrplugin_assign = 0

尚、Vim-R-pluginを使わない場合も閉じ括弧の問題は解決せず、さらにインデントがおかしくなります。

解決

Rはあまり詳しくないですが、formatRが使えるみたいです。

formatRを先にインストールしておいて:

> install.packages("formatR")

.vimrcに以下のように記述します:

au BufNewFile,BufRead *.R setl ep=r -s -e 'library(formatR);tidy_source(text=readLines(file("stdin")))'

ファイルを開いてgg=Gすれば整形できます。プラグインは、はずしましょう。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *