For love or money, I write R code almost every day.
Once I started writing more R code for money, I wanted to find alternatives to RStudio, and unfortunately, there aren’t any. RStudio is without competition in the GUI side of the market.
I don’t remember how I found Nvim-R, but I did and now I can’t imagine working without it. It has become my favorite and default way to write R, no matter the size or the complexity of the script. I use Nvim-R with neovim, but it works with vim too.
Install it with your package manager of choice; I use Vundle:
Once you have a
.R file in the buffer, you can invoke Nvim-R with the default shortcut
<LocalLeader>rf. Nvim-R will open a vim shell window that runs the R console. The configuration I ended up with – see screenshot above and vim configuration code below – puts the source editor in the top left, the object browser in the top right, and the console in the bottom. You can set it up so that hitting space bar in normal mode sends lines from the source editor to be executed in the console. Want to send many lines? This function also works with highlighted lines in visual mode.
Speaking of the object browser: Nvim-R’s object browser is similar to RStudio’s. It shows you the R objects in the environment and updates itself as objects are created and removed. Except I like Nvim-R’s object browser better. It assigns different colors to objects of different types, and it will, by default, expand the dataframes to list their columns underneath them (you can turn that off so that you expand the dataframes you want by hitting Enter on their entry).
I rarely read vim plugin documentation because the features and options I need are often general enough to be described in the READMEs, but if you’re considering using Nvim-R, I highly recommend reading its help/docs. They’re well-written and they’ll help you customize your development environment to your exact specifications:
These are my settings, and they only give a taste of how customizable Nvim-R is:
" press -- to have Nvim-R insert the assignment operator: <-
let R_assign_map = "--"
" set a minimum source editor width
let R_min_editor_width = 80
" make sure the console is at the bottom by making it really wide
let R_rconsole_width = 1000
" show arguments for functions during omnicompletion
let R_show_args = 1
" Don't expand a dataframe to show columns by default
let R_objbr_opendf = 0
" Press the space bar to send lines and selection to R console
vmap <Space> <Plug>RDSendSelection
nmap <Space> <Plug>RDSendLine