読者です 読者をやめる 読者になる 読者になる

重度のESS使いなら、きっと涙目になるか、すでに知っているかのどっちかのキーバインド

Emacs R ESS

Rを使いまくっていると、こんな感じのコードが結構出てくるかもしれない。何をやっているかは、どーでもよい。

unlist(Map(function(i){(function(x,n){return(sum(x^n))})(1:10,i)},1:10))

で、このコードのうちある箇所をマークしたいとする。

function(i){(function(x,n){return(sum(x^n))})(1:10,i)}

さっきのコードからマークしてkillとかをしようと思うと、括弧がネストしまくっていて*1、死にたくなってくる。そんな時にS式の登場である。

S式単位の移動

まず、EmacsにおけるS式単位での移動等について復習しておこう。まず、こんなlistがあったとする。

(list '(a b c d e) '(f g '(h i j)))

そんなに複雑でもないが、以下のところを切り張りしたいとき

(f g '(h i j))

こんな感じにしておいて

C-M-@(mark-sexp((卑猥な表現で読んだ人は(ry)))を押すと、regionが次のような感じになる!!

これを切り張りすれば、S式なので自由に使いまわせる、というわけである。S式万歳!!

Rに戻ると

さっきの例。上のS式のやつをこれに適用して、切り取ってみると

unlist(Map(function(i){(function(x,n){return(sum(x^n))})(1:10,i)},1:10))



functionのところが残って、大変残念な感じになってしまう。S式じゃないことを後悔していまいますね。RのコードをS式に変換するのを書こうかと思いましたがやめておきました。

どうするか

M-b(backward-word)という関数があるので、それを使う。

M-bを二回押すと…

欲しいものが出てきた!!2回押さないといけないのがあれですが、ネストした括弧を目で追うよりずっと楽ですね!!

*1:そんなでもないが