The Value of TextExpander Snippet Conventions: Web Addresses, Citations, Bibliographical References, Markdown and More

Smile Software’s TextExpander is the productivity app I use the most. It allows one to define and expand abbreviations for frequently used content (text and images). For example, suppose you frequently need to refer to me in text. You might create a snippet whose abbreviation is “@luc” (without the quotes) and whose target content is “Luc P. Beaudoin“. (See the section on name abbreviations.) That’s particularly handy for long or foreign names. (Mine is a French name).

TextExpander provides statistics that quantify its benefits. From the screenshot below you can see that I’ve expanded nearly 212,000 snippets, saving me 2.8M characters. However, these statistics doesn’t tell the whole story. In particular, there are workflows, such as fine-grained project-tracking that I alluded to in Cognitive Productivity, that are simply not feasible without a text expansion app.

TextExpander Statistics Window

To get the most out of a TextExpander, you need to remember your abbreviations. That means obeying principles of memory and cognition. To dramatically ease the burden of creating and learning abbreviations, develop conventions for them. Patterns reduce the mathematical “complexity” of learning, and they exploit your brain’s natural, impressive ability to process patterns.[1]

Given that we learn best by examples, this article provides several examples of conventions you can use to create TextExpander snippets. Once you start using such conventions, your database of snippets will grow rapidly and so will the number of times you apply these snippets.

In particular, this post illustrates snippet conventions for

At CogZest we aim not only to develop your productivity, but also to convey important information about the human mind. So, while explaining these uses of TextExpander, this blog post also demonstrates a deep cognitive concept: while using a text expansion utility productively, you develop and acquire a new language. If you’re not a software developer, with TextExpander, you may be surprised how quickly your mind can do this. The speed and flexibility with which we can do this distinguishes humans from other animals.

There is already plenty of basic information on the web about about using TextExpander. If that is what you’re looking for, check out the TextExpander web site or Asian Efficiency. But then come back here for additional insights.


Accessing Domains and Developing Your Own Snippet “Grammar” (Language/Conventions)

How do you access frequently used web pages? Use Google? That’s slow. A system that requires that you use the mouse is too slow. Most web browsers’ bookmark managers are of limited use. A system that requires that you visually examine and process UI output is too cognitively demanding (i.e., it needlessly disrupts your thinking and contributes to fatigue) and is too slow. So, using the browser’s address bar with type ahead filtering—the type that lists a bunch of possible URL matches as you type in the address bar—is of limited use for frequently accessed sites.

TextExpander enables you to quickly access frequently used web pages.

Here are some of my snippets:

  • #msb” → (Website for mySleepButton®, an app to facilitate sleep that I co-designed.)[1.5]
  • #msbapp” ( App Store Web page on for mySleepButton.)
  • #msbgp” (Google Play web page for mySleepButton. Notice the pattern “#msb…” .)
  • #cp” → (The URL to my first book.)
  • #cpam” → (URL to my book on amazon. Notice the simple pattern: I re-used “cp” and tacked on “am”.)

For example, my various project teams use Bugzilla for managing issues and tasks. To access our CogSci Apps Bugzilla server I simply type: “#bugs” and the tab key, which expands to something like (For security reasons, I am not publishing our real bugzilla domain name.)

To help you get the point about patterns, I’ll list some more examples.

Snippets for accessing issues

  • #?bugs” → (That brings up the Bugzilla search page).
  • #?msb” → (That gives me a list of all the mySleepButton for iOS issues.)
  • #?msb1.3.2” → (That gives me a list of all the issues for mySleepButton 1.3.2 issues.)
  • #?msbgp” → (Notice the pattern: “msb” followed by “gp” for google play.)
  • #?sot” → (That gives me a list of all open SomnoTest issues. SomnoTest is a different product from mySleepButton. All my Bugzilla product snippets follow this pattern.)

Then, when you are in a web browser and you want to access a particular web page, just:

  1. use a keyboard shortcut (such as Command-L) to access the address bar, and
  2. type in the abbreviation and your text expansion delimiter (e.g., tab key).

TextExpander will populate the address field with the URL.

And if you are in a different app and want to access the web page, you can simply

  1. invoke your launcher (e.g., LaunchBar),
  2. type the abbreviation in its input window,
  3. type the delimiter key, and
  4. hit the ENTER key.

Then your launcher will automatically open that location in your default browser. (If you’re not using an app like LaunchBar you’re missing out on another essential productivity tool. More on TextExpander + LaunchBar/Alfred integration below.)

You have probably noticed a pattern in the snippets above and clued in that I’ve developed a little “language”. This is not a language that TextExpander knows. (TextExpander does not yet support learning snippet conventions. I am sure one day it will.) It’s just my language at this point. Well, our language, as I’m sharing it with you, my reader. Part of this language is this:

  • #” at the beginning of a snip (to me) means that the abbreviation expands to a web address.
  • msb and sot are the in-house code names for two of our products (mySleepButton and SomnoTest). To access bugs for mySleepButton, I use “msb” in the abbreviation; to access SomnoTest issues I use “sot”.

The upcoming examples illustrate how such a language can grow.

Remembering abbreviations is easy once you start developing your own conventions (actually, your own grammar).[2] And the brain is surprisingly adept at designing and learning new formal languages, when it gets into the habit of doing so.

Snippets for creating issues

Of course, Bugzilla also allows you to create issues. And that is an all too common occurrence. (Remember, we use Bugzilla not just for bugs but for developing new features.) So I have abbreviations for that too.

  • #!msb → (This brings up the issue mySleepButton issue creation web page. That’s where we create new issues for mySleepButton.)
  • #!sot → (This brings up the issue SomnoTest issue creation web page. That’s where we create new issues for SomnoTest.)

So, the prefix “?” is for search and “!” is for creation—a convention that is not unique to me.

Product abbreviations

Now, as you’d expect, I also have TextExpander snippets for mySleepButton and SomnoTest themselves:

  • “msb” → mySleepButton
  • “sot” → SomnoTest

and for our other products under development. Notice that there is no “#” before these abbreviations, because I reserve that symbol as a prefix for web addresses.

Some Other Examples

Sometimes, I want to refer to web sites without linking or referring to the network protocol (the “http://” part). For this, I use “.” as a prefix. So, compare:

  • .msb” →
  • .sot” →
  • #lpb” → (My academic home page)
  • #isrepdf” → (The address of the PDF file of the paper I presented at the recent ISRE conference. I’ll need to change the abbreviation to “#isre15pdf” after the next ISRE conference.)
  • #blte” → (Will be the snippet for this blog post. That’s because all my CogZest blog post URL abbreviations start with “#bl”; and “te” is my abbreviation for TextExpander. mySleepButton abbreviations start with “#msbbl”. My SFU blog posts start with “#blsfu“. That way, I can quickly access these blog posts and send the URLs to people when needed.)


Markdown Links

TextExpander is very helpful for abbreviations in any formal language, such as markup languages and programming languages.

I often want to refer and link to mySleepButton and my book in markdown syntax. I prefix markdown links abbreviations with “[], since that is what the expanded text starts with. Examples:

  • [msb” → [mySleepButton]( . Markdown HTML renderers respond to this string by generating mySleepButton.
  • [&cp” → [_Cognitive Productivity_]( Markdown HTML renderers respond to this string by generating Cognitive Productivity. (Notice that I have re-used “cp”. We’ll get to the “&” symbol later.)
  • [&cp+” → [_Cognitive Productivity: Using Knowledge to Become Profoundly Effective_]( (Long form version of the book with the suffix, “+“.)


Within document crosslinks can be very helpful. But they are tedious to write in markdown. Hence the following conventions for link targets:

  • <a” → <span id=”linktarget”><span> . Then you just need to replace the link target text.

Linking to this is normally easy enough that you don’t need a snip. One exception is footnotes. I like to put the origin of footnote numbers in square brackets. But square brackets have a special meaning in Markdown, hence the following snip:

  • [[N]](#N)%<%<%<%<%<%<%<%<%< → [[N]](#fnN) . The string of six “<%” is to tell TextExpander to position the cursor just beyond the “N” so that I can replace it with the appropriate number. I could have used a special TextExpander incantation to invoke a dialog box where I’d fill in the footnote number. But sometimes I keep the footnotes blank until the end of the post. Typically, I will link this to a span whose id starts with “fn”, thus the “#fnN“. (NB: It is sometimes necessary to use HTML character entities per Daring Fireball. TextExpander handles them.)

Occasionally used snips

TextExpander is also useful for syntax one doesn’t use frequently enough to remember, but yet frequently enough not to want to look it up online every time. For example, to refer to images in Markdown, I use this:

  • <img” → <img src=”image-path” alt=”Text”>

These uses of TextExpander aptly illustrate a point I made above, namely that TextExpander does not merely save typing and time. It also enables one to do things one might not otherwise bother doing. If you’re pressed for time, you might not bother with crosslinks and footnotes. But with TextExpander, it’s a cinch.


Bibliographical Citations, References and Titles (Markupless and Markdown)

If you’re a professional researcher, then there is probably a small percentage of bibliographical references to which you often refer. It is worth creating snippets for them. But again, these snippets are impossible to remember, and unmanageable, unless you have conventions.

Here are some of my conventions:

  • I prefix citations with “&“. For example: “&ndlpb” → Digdon & Beaudoin (2015). (ND are Nancy Digdon’s initials.) I recently wrote an article that often referred to Ellis, Cushing & Germain (2015); I defined the abbreviation “&Ellis15” for that.
  • I prefix full bibliographical references with “&&“. For example, “&&ndlpb” is mapped to:
    Digdon, N. & Beaudoin, L. P. (2015, July). A test of the somnolent mentation theory and the cognitive shuffle insomnia treatment. Poster presented at the 37th Annual Conference of the Cognitive Science Society. Pasadena, California USA. Retrieved from
  • Given my aforementioned use of “[” for markdown abbreviations, it is natural to use “[&&” for full bibliographical references in markdown format. That includes formatting, such as italics, and hyperlinks. So: “[&&ndlpb” →
    Digdon, N. & Beaudoin, L. P. (2015, July). [A test of the somnolent mentation theory and the cognitive shuffle insomnia treatment.]( Poster presented at the 37th Annual Conference of the Cognitive Science Society. Pasadena, California USA. Retrieved from [](
    which expands to:
    Digdon, N. & Beaudoin, L. P. (2015, July). A test of the somnolent mentation theory and the cognitive shuffle insomnia treatment. Poster presented at the 37th Annual Conference of the Cognitive Science Society. Pasadena, California USA. Retrieved from


One of the most important ways to help people is to recommend potent, high caliber books or papers to them. Often, one doesn’t want to include the entire reference (as was done in the previous section) — the title suffices. Here is how the conventions I’ve already presented can be extended for titles.

  • I prefix my TextExpander abbreviations for titles with “&_“. The underscore is easy to remember because titles are typically in italics, and underscore is the markdown / Internet convention for introducing italicized text. For example, “&_cp” → Cognitive Productivity . I often recommend to couples one of John Gottman’s excellent books, which I abbreviate with “&_JG2000” → The Seven Principles for Making Marriage Work.[3] Using this snippet ensures that I correctly name the book, and that the title is formatted correctly (capitalized, italics) so the reader can tell I’m referring to a title.
  • If I’m writing in markdown about a frequently referenced book, then my snip sometimes includes the hyperlink. For example, to refer to my first book, I use “[&cp” → [_Cognitive Productivity_]( That way, the recipient gets a handy link she can use to access my book.

I hope that Mekentosj Papers will soon provide an API for third parties to access the Papers database. Then TextExpander could in principle be enhanced to automatically create dynamic or virtual snippets for bibliographical citations and references (based on citekeys), and/or enable users to quickly define their own TextExpander abbreviations for them. Scholars very frequently cite papers.


Abbreviations for Names of People and Their Email Addresses

One of the types of information people most frequently refer to are other people. (You will recall that I started this post with an abbreviation for my name.) We refer to people by their names, their email addresses, their web addresses and their twitter handles. The first two, in particular, are very often worthy of snippets.

Again, it is very handy to give some thought to conventions. My convention for names is to prefix extended initials with “@“. More specifically, my name abbreviations usually use the first two letters of the first name followed by the second two letters of the last.

Here’s a couple of examples:

  • @brte” → Brett Terpstra.
    Brett has an excellent productivity web site that I often refer to. I therefore also have this snippet:
  • #brte” → [](
  • @brsh” → Brian Shi. He’s co-founder of our software company, CogSci Apps Corp..
  • “@jogo” → John Gottman.
  • @lege” → Les Gellis, who is principal investigator of an insomnia study involving mySleepButton’s companion app.

Why use four letters rather than just two initials? Well, this dramatically decreases the possibility of abbreviation clashes. By mathematical necessity, far fewer people share the first two pairs of letters than share initials. Having said that, for people with short names that I refer to the most, I often also use their initials. So, I also use “@bs” for Brian Shi.

E-mail addresses

Of course, many of the people one refers to are people with whom one exchanges emails. So, I also define email address snippets for some of them. My convention here is to use a two-“@” prefix, “@@“. E.g.,

  • @@brte” → (I won’t disclose his email address here.)
  • @@brsh” → (“…….”……..”……”……”……”)

Who knows? Perhaps Smile Software will enhance TextExpander to automatically create TextExpander snippets for frequently used names and emails.


Launcher Abbreviations

Above, I mentioned one type of integration between TextExpander and LaunchBar. In that case, you cause TextExpander to expand one of its abbreviations (for a URL) while you are in LaunchBar and LaunchBar instructs the operating system to open the web page in the default Browser.

However, there is a more abstract and interesting implicit form of integration you can achieve with the two apps. LaunchBar is also a tool that provides abbreviations. It allows you to define abbreviations for resources (files, URLs, etc.) and actions. When you define abbreviations in LaunchBar, you might as well use the same conventions as the ones you use for TextExpander. And vice versa.

Here are some examples.

  • To access Brian Shi’s contact card, I use “@bs” in LaunchBar’s input window. To open a mail message window addressed to Brian via LaunchBar, I use “@@bs“. Same abbreviations.
  • To access the HR folder I keep about an RA whose TextExpander name abbreviation is “@niki“, in LaunchBar I type “niki“, which immediately opens the folder. To access our shared Dropbox folder, I use “nikidb“. That’s because I always use “db” as the suffix for abbreviations of Dropbox folder names.
  • For accessing particular Bugzilla issues using a LaunchBar Search Template, I use the same product abbreviations as I do for their names.

So being systematic in one app makes it easier to be systematic in another.

Upshot: Aim for Systematicity Using the Golden Rule

I’m not suggesting that you necessarily use the specific conventions I’ve proposed. My main point is to suggest that as you use TextExpander, you pay attention to the “grammar” and lexicon you are developing. In particular, it’s helpful to have a grammar that is “generative”, meaning that it will help you generate new abbreviations, and new classes of abbreviation for different classes of content.

A central premise of Cognitive Productivity is that productivity and efficiency do not come for free. To develop expertise, one must take time out for learning, to “Sharpen the Saw”. That means: reading, thinking and practicing. Tiger Woods often reworks his already expert swing, to make it even better.

So, it is worth taking a bit of time to design helpful TextExpander conventions and learn how to use them.

Pursuing systematicity will ensure you don’t develop an unusably complex welter of snippets, thereby maximizing your productivity.

Having said, don’t let the goal of systematicity get in the way of using TextExpander expediently. Here, virtue lies in the mean between insufficiently and excessively tuning your use of this tool.

Retrieval Practice

You can have the most memorable snippet conventions in the world. Unless you use the tool, you won’t be able to remember them.[4] If you can’t remember your abbreviations, or something about TextExpander, consider looking it up. If you’re too busy to even do that, consider creating an entry in your action management system (such as OmniFocus) to come back to it when you do have time.

Further Information about TextExpander and Cognitive Productivity

Modern cognitive productivity requires using multiple applications in ways that not only save you time, but generate and instill knowledge. Part 3 of my book, Cognitive Productivity contains several other tips for using TextExpander to potentiate other applications.

Most new scientific information is published in PDF files. However, as I argued in Cognitive Productivity, the formatting of those files is often not conducive to deep learning. On this blog, I will soon publish new tips for using another Smile Software app, PDFPen Pro, to help you navigate and delve PDF files.


1 The general principle of “meta-effectiveness” here is to convert a task that humans are not good at (such as memorizing long arbitrary lists) to one they are good at (pattern construction and pattern matching.)

1.5 The arrows (→) on this web page are to indicate the mapping between a TextExpander snippet’s abbreviation and expanded content. Incidentally, I have a TextExpander snippet to output this character. My snippet maps “–>” to →. I have mappings for many other non-ASCII characters, such as ↑, ↓, ←, and ®.

2. There’s plenty of information on the web about grammars. Learning about grammars from textbooks is one thing. But it’s also helpful to use an AI programming tool to explore grammars. I experimented with Poplog Pop-11’s grammar tutorial 25 years ago. That classic, powerful AI programming system (Poplog is now hardly used, unfortunately. On this site, in Cognitive Productivity, and in my scholarly publications, I often refer to the human mind as a collection of interacting virtual machines. The Poplog VM (virtual machine) is the inspiration for this concept, which comes from Aaron Sloman.

3. I don’t merely recommend reading Gottman’s book, I recommend mastering his approach. Cognitive Productivity provides several tips for mastering his approach in particular, and many more for mastering all kinds of knowledge.

4. Everyone who knows about research on expertise knows that deliberate practice is critical to expertise. There are many books and articles on the subject. However, few of them deal with deliberate practice for knowledge workers. In fact, the cognitive psychology of expertise hardly deals directly with knowledge work at all. The literature on deliberate practice focuses almost exclusively on public performance (e.g., chess, music and sports). Chapters 7, 13 and 14 of Cognitive Productivity contains an in depth analysis of several types of practice for knowledge workers.


Thanks to Jeff Rivett for updating my cross link syntax.


CogZest is part of the Smile Affiliate program and may be eligible for commissions on sales of Smile Software generated through links from this web site.

Published by

Luc P. Beaudoin

Head of CogZest. Author of Cognitive Productivity . Cognitive productivity consultant and public speaker. Adjunct Professor of Education, Simon Fraser University Co-founder of CogSci Apps Corp. See About Me for more information.

Leave a Reply

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