Mick
Mick

Reputation: 31919

Surround Visual Text with more than 1 character

How would you surround the following text with 3 backticks ``` using tpope's Vim Surround.

All I can is 1 backtick using S` in visual mode:

enter image description here

Upvotes: 6

Views: 937

Answers (3)

romainl
romainl

Reputation: 196546

This is not what you asked but this can be done without surround:

(from visual mode)
c
```
<C-r>"
```
<Esc>

See :help i_CTRL-R.

  1. c: Delete text and start insert. The deleted text is put in the unnamed register ".
  2. Type the prefix characters.
  3. Use <C-r>" to paste the content from the unnamed register.
  4. Type the suffix characters.

Upvotes: 11

SergioAraujo
SergioAraujo

Reputation: 11800

Here another ultisnips solution.

snippet code "add backtics codes" w
`!v repeat(nr2char(96),3)` ${1:markdown}
${0:${VISUAL:type here}}
`!v repeat(nr2char(96),3)`
endsnippet

If you do not want "markdown" after the first line just get rid of it. I am showing this solution only to show how to avoid backslashing so much.

Upvotes: 2

dNitro
dNitro

Reputation: 5345

Define a custom surround:

(Insert following in your .vimrc or file specific config ~/.vim/after/ftplugin/markdown.vim )

" Custom surrounds
let b:surround_{char2nr('c')} = "```\r```"

now visual select and Sc will give you desired surround.

Or use a snippet solution; for example using Ultisnips define a snippet like so:

snippet code
\`\`\`${1}
${0:${VISUAL}}
\`\`\`
endsnippet

now visual select your desired lines then hit snippet expansion key ( mine is Tab ) type code and hit Tab again. that's it.

Upvotes: 6

Related Questions