If you spend time with an excellent programmer, one thing that immediately jumps out is how quickly she can write code. It often appears to be magic, the number of keystrokes simply can’t equal the number of characters on the screen. The secret: it doesn’t! Most programmers use a series of tricks to save the hassle of writing boilerplate code. This month, my personal goal was to spend less time typing, even if it required slowing down to master these tricks. In this post, I’ll focus on one of the easiest and most flexible tools at your disposal: code snippets. (Astute readers will note that I’ve mentioned code snippets before. They deserve the extra attention!)
Code snippets are a common programming tool similar to keyboard shortcuts. A snippet of text, usually a few characters long, is used as a shortcut to create a larger piece of boilerplate code. Tab
navigation enables jumping through the boilerplate code to locations where customization is required.
For example, one of my favorite code snippets is for creating a function. The template of an R function looks like:
functionName <- function(arguments) {
code
}
The boilerplate - not worth typing - is:
<- function( ) {
}
In RStudio, the code snippet for functions is fun
. Typing fun
and pressing Tab
will provide an auto-complete suggestion for the snippet. Typing fun
and pressing Shift + Tab
inserts the snippet directly. As a general typing rule, keeping your hands on the middle row of the keyboard will speed things up. I hit Shift
with my right pinky and Tab
with my left.
After inserting the boilerplate code, the cursor is placed to left of the <-
. You can then quickly type the name of the function. Pressing Tab
places the cursor in between the parenthesis. Pressing Tab
again places the cursor in between the brackets. This allows you to fill in the remaining portions of the function template quickly.
Type fun
and Shift + Tab
:
HERE <- function() {
}
Pressing Tab
Once
<- function(HERE) {
}
Pressing Tab
Twice
<- function() {
HERE
}
Accessing Snippets
RStudio comes with many built-in snippets. To access these snippets, navigate to Tools
-> Global Options
-> Code
and press Edit Snippets
.
The menu will show all of the defined snippets. Consider the definition for the function snippet:
snippet fun
${1:name} <- function(${2:variables}) {
${0}
}
The snippet starts by defining the character shortcut fun
. The definition includes the boilerplate code. The Tab
behavior is defined using ${1}
notation. The code snippet help page describes the syntax in more detail.
A Few Examples
ts
Adds a time-stamped comment.
# Mon Feb 20 07:34:03 2017 ------------------------------
if
Adds the skeleton of an if
statement
if () {
}
mat
Adds the skeleton for defining a matrix.
matrix( , nrow = , ncol = )
There are code snippets for other languages as well.
Creating Snippets
Code snippets are powerful because they can be customized and created. If you find yourself repeatedly typing the same code, create a snippet. The menu of snippets in RStudio is editable. To create or modify a snippet, add your changes to the menu and click Save
.
Sharing Snippets
Once you’ve created a handful of useful code snippets, it would be generous to share. The snippr
package makes this process easy.
This gist contains two of my favorites: a code snippet for creating a single file Shiny app, and a code snippet to start a ggplot.
Shiny:
snippet shiny
library(shiny)
ui <- fluidPage(
${1:ui}
)
server <- function(input, output, session){
${2:server}
}
shinyApp(ui = ui, server = server)
ggplot2:
snippet gg
ggplot(${1:data}, aes(${2:aes})) +
geom_${3:geom}()
What are your favorite snippets?
You may leave a comment below or discuss the post in the forum community.rstudio.com.