Is there a functionality in Vim that allows parenthesis to be added around the highlighted text?
For instance, if I highlight n = getchar()
in if (n = getchar() == '\n')
, I would want to put parenthesis around that.
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.
Sign up to join this communityYou need an awesome and must-have plugin surround. Then, it will happily do what you want if you select text and type Sb
(surround-braces), or S)
(note the capital S !).
It actually can do a lot of surrounding: various quotes, tags, etc. It allows you to put cursor in the double-quoted word and change double quotes to single quotes by typing: cs"'
(change-surround "
to '
). Or you can completely delete quotes by typing ds"
(delete-surround "
).
Read the docs by link, it is really awesome!
sb
(surround-braces), or s)
.
Aug 5, 2016 at 14:31
s
just deletes the selection and enters insert mode.
Aug 5, 2016 at 14:43
In addtition to Dmitry's suggestion of the surround plugin, adding parenthesis around highlighted text can be done with the following command:
xi()<Esc>P
You can set a map in visual mode using (for example) \s
by adding the following to your ~/.vimrc
file:
xnoremap <leader>s xi()<Esc>P
V
instead of v
). In this case it just pastes the lines below your parens.
Oct 9, 2017 at 18:04
di()<Esc>P
as x
doesn't yank the selected word into a paste buffer for me. You can also use vnoremap
for the shortcut to work in both visual and select modes, rather than just visual.
c()<Esc>P
If you want to put the word under the cursor in to brackets this is viwc()<Esc>P
.
viw
will v
isually select all charactrs i
n a w
ord.
c()
will c
change the selection and drops you into insert mode, where you type the literal characters (
)
. Also, c
automatically copies the original content to your yank
buffer (clip board).
With <Esc>P
you return Esc
back from insert to normal mode and P
aste the previous content.
Building on dotancohens answer, I put the following in my .vimrc
:
xnoremap <leader>( <ESC>`>a)<ESC>`<i(<ESC>
You can easily make similar mappings for [], {}, etc. It works by jumping to the start and end markers implicitly set after ending visual mode. This way selecting whole lines will add the parens at the start/end of the first/last line; it won't overwrite your yank register; and it'll leave the cursor right before the opening paren.
lh-brackets simply binds (
to surround the selection with the brackets. Unlike surround it doesn't follow the vim usual keybinding philosophy as does. Instead less keys are required.
Otherwise, there are many ways to proceed. If you don't mind messing the unnamed register, you also use s(^R")<esc>
(^R
like CTRL-R
)