Using a simple mapping and only a couple Vim features, swap types of quotes, i.e. from “foo” to ‘foo’.
I often find myself dealing with Bash or Perl code, and I like to be strict about the type of quotes I use:
- single quotes when no variable interpolation is required
- double quotes when it is
Oftentimes, I start writing a chunk of text in single quotes and only later realise I’d like to insert a variable in it. As an example:
my $foo = 'This is foo';
foo='This is foo'
If I’m in the middle of the string, i.e.
is, I’d then have to perform some
vim gymnastics to perform the swap.
So I’ve automated it. In my
~/.vimrc I have:
" Swap single for double quotes (and the other way around) for this chunk nnoremap <Leader>' mqva"l:s/\%V"\%V/'/g<CR>`q nnoremap <Leader>" mqva'l:s/\%V'\%V/"/g<CR>`q " Add quotes around (at start of, and at end of) visually selected text vnoremap <Leader>' <Esc>`>a'<Esc>`<i'<Esc> vnoremap <Leader>" <Esc>`>a"<Esc>`<i"<Esc>
No matter whether I’m in normal mode “inside of” a string, I can hit
<Leader>' to swap double quotes for single quotes, or
swapping single quotes to double quotes.
If I’m instead wanting to add quotes to a chunk of text, I can just visually
select it and hit
<Leader>' to surround it with single quotes, or
to surround it with double quotes.
Much simpler than doing it manually.