Writing with Vim
Post created 2013-11-09 11:56 by Gabe Koss.
As much as I love
vim for working on code projects I also enjoy using
for writing non-technical work.
There are a lot of different approaches to this but I have figured out a few useful things.
Markdown is your friend
Since I love using vim I need to be able to format plain text documents for viewing outside of the command line. Markdown syntax is very handy for this and so I do a lot of writing in this way.
If you use Github for storing you writing can view Markdown files directly through that interface pre-rendered in a nice way. I also often use a static site generation tool such as Nanoc or Jekyll to view rendered markdown templates.
I find working with plain text to be very liberating. Here is the official markdown syntax guide.
If you are feeling hardcore you can also use Latex but I haven't gone down that rabbit hole just yet.
.vimrc for Writing
At the bottom of my main
.vimrc file I added the following lines:
if filereadable(".vim.custom") so .vim.custom endif
This checks for the presence of a
.vim.custom file and loads those custom
configurations if it is present in the directory where
vim was started.
This file takes the same syntax as
.vimrc and I add some settings to help
with writing things that aren't code. Here are some handy ones:
Disable Line Numbers
set wrap linebreak nolist
Cause linebreaks in wrapped lines of text to break at normal word boundaries rather than cutting words in half
noremap <c-l> :nohl<cr>
<Ctrl>+l to be equivalient to the vim command
:nohl which disables
search result highlighting after searching with
Improve naviation on wrapped lines
noremap j gj noremap k gk
When long text lines wrap it is sometimes helpful to be able to travel directly
above or below your current cursor location on the line. Unfortunately the
traditional keys for this movement (
k) will hop to the next line even
if the line is wrapped. When writing in a long paragraph this can be very
This can be helped by using the
gk commands instead, but this is
tedious to have to remember, by adding the alias above
k will behave
Disable Syntax in Markdown Files
au BufRead *.md set ft=
This sets the file type of any file with a
*.md* file extension to a null
value which effective disables syntax highlighting. This helps with
trying to syntax highlight things like a hyphen as an unclosed single quoted
setlocal spell spelllang=en_us
This turns on the spell check feature of
vim and sets it check against the
English US dictionary file.
Misspelled words will be highlighted. There are many features to the
spell checker which can be accessed in
:help spell. Realistically I use only a
fraction of the features of the spell checker to do 99% of what I need.
[s: Hop to previous/next misspelled word.
z=: Show a list of suggested spellings. Run this when the cursor is over a
zg: Add this word to the custom dictionary. This dictionary is location in
~/.vim/spell/en.utf-8.add. Words added here will no longer show up as
mis-spelled. this file can be edited directly to prune or add words.
Formatting Text with
gq command is an awesome tool for formatting text into paragraphs. There
are two ways to use it.
Select text and type
gq to format selection. There must be blank lines
between the paragraphs.
Alternately you can format the current paragraph your cursor is in with
Play with it and you will be pleasantly surprised!
gq commands are bound to the
textwidth setting. It defaults
to 78 with a max of 79. This setting can be adjusted to affect the width that
gqip will wrap the lines.
For more about this cool function visit