33 Commits
v1.90 ... v2.0

Author SHA1 Message Date
Tim Pope
0b2c9ff9df surround.vim 2.0
* Fix vs with selection=exclusive.
* Remove `unnamedplus' from clipboard in addition to `unnamed'.
* Kill vs.
* Bump to Vim 7.
* Add support for repeating ys commands.
* Add support for repeating tags.
* Don't save deleted surrounding in unnamed register.
* Fix deletion of delimiters on their own lines.
2013-01-01 01:44:29 -05:00
Tim Pope
4c9a4e0b34 Add a lisp function call replacement
Not sure how useful this is but we'll sneak it in undocumented.
2013-01-01 01:42:57 -05:00
Tim Pope
29afa295ae Add : replacement
Both Ruby and Clojure use :keywords, so I'm considering this general
enough to make a default.
2013-01-01 01:34:27 -05:00
Tim Pope
1c9d8e660c Add leading space replacement 2013-01-01 01:32:49 -05:00
Tim Pope
ac67c1a738 Remove documentation of LaTeX expansion
It's dumb, but I can't bring myself to yank it out entirely just yet.
2013-01-01 01:29:57 -05:00
Tim Pope
f57e5aa972 Fix deletion of delimiters on their own lines
Closes #19.
2012-12-25 17:20:21 -05:00
Tim Pope
1a73f607f8 Remove s warning
Closes #51.
2012-06-07 20:50:23 -04:00
Tim Pope
489a1e8c67 Fix . with ys and replacements with input 2012-03-14 12:34:06 -04:00
Tim Pope
dfea25aae8 Fix . after a ys map
Closes #54.
2012-03-14 09:23:25 -04:00
Tim Pope
efc017dcb4 Don't save deleted surrounding in unnamed register 2012-03-03 06:46:11 -05:00
Tim Pope
98e4526c26 Merge pull request #52 from padgetap/master
Make repeat work for HTML tags
2012-03-03 03:45:56 -08:00
Alex Padgett
25f59364db Enable repeat with tags for cst 2012-03-02 10:29:25 -05:00
Alex Padgett
b8b7ed84ee Clear s:tag before starting wrap function 2012-03-02 10:24:19 -05:00
Alex Padgett
09fd529c7a Add tag to the end of repeat message 2012-03-02 09:45:03 -05:00
Alex Padgett
3482aea5ba Add support for tag repeat 2012-03-02 09:20:22 -05:00
Chris Johnsen
4eb2cdfccc Fix typo 2011-11-15 15:58:51 -06:00
Chris Johnsen
f77ee23e7e Fix more mentions of "vs" in the docs 2011-11-15 15:58:16 -06:00
Tim Pope
6f0984a5ca Don't clobber v_s map 2011-10-06 18:15:49 -04:00
Tim Pope
440dc59614 Typo 2011-09-17 16:42:24 -04:00
Tim Pope
f6c9d3beb2 Warn about removed "s" mapping 2011-09-10 19:25:18 -04:00
Tim Pope
c9120390d8 Kill vs in the docs 2011-08-30 20:32:41 -04:00
Tim Pope
21d7375644 Bump to Vim 7 2011-08-30 20:32:41 -04:00
Tim Pope
2e600335db Clarify copyright 2011-08-30 20:32:41 -04:00
Tim Pope
6fb16eae21 Kill vs 2011-08-29 01:54:43 -04:00
Tim Pope
3d2d04a31b Add a README 2011-08-29 01:22:01 -04:00
Tim Pope
50934cc38b Ignore doc/tags 2011-08-29 01:21:49 -04:00
Tim Pope
4eed69afe5 Kill boilerplate and commented code 2011-08-29 01:00:43 -04:00
Tim Pope
010c5fc915 Use URL not email 2011-08-29 00:54:47 -04:00
guns
d9e6bfdd90 Remove unnamedplus' from clipboard in addition to unnamed'
Vim 7.3.074 adds the `unnamedplus' feature to the clipboard option,
which allows use of the "+ register (X11 CLIPBOARD) via yank/paste
2011-01-23 12:29:07 +08:00
Tim Pope
193649616c Fix vs with selection=exclusive 2011-01-11 23:15:43 -05:00
Tim Pope
e6f8ab5b82 Update email address 2011-01-11 23:15:43 -05:00
Peter Vandenberk
b99ce735ea add space after ">" at end of line to ensure vim visibly renders it 2010-12-20 04:30:28 +08:00
Tim Pope
27710a2224 Add rob-fortune's mnemonic for "ys" 2010-09-09 11:00:28 -04:00
4 changed files with 168 additions and 135 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/doc/tags

97
README.markdown Normal file
View File

@@ -0,0 +1,97 @@
surround.vim
============
Surround.vim is all about "surroundings": parentheses, brackets, quotes,
XML tags, and more. The plugin provides mappings to easily delete,
change and add such surroundings in pairs.
It's easiest to explain with examples. Press `cs"'` inside
"Hello world!"
to change it to
'Hello world!'
Now press `cs'<q>` to change it to
<q>Hello world!</q>
To go full circle, press `cst"` to get
"Hello world!"
To remove the delimiters entirely, press `ds"`.
Hello world!
Now with the cursor on "Hello", press `ysiw]` (`iw` is a text object).
[Hello] world!
Let's make that braces and add some space (use `}` instead of `{` for no
space): `cs]{`
{ Hello } world!
Now wrap the entire line in parentheses with `yssb` or `yss)`.
({ Hello } world!)
Revert to the original text: `ds{ds)`
Hello world!
Emphasize hello: `ysiw<em>`
<em>Hello</em> world!
Finally, let's try out visual mode. Press a capital V (for linewise
visual mode) followed by `S<p class="important">`.
<p class="important">
<em>Hello</em> world!
</p>
This plugin is very powerful for HTML and XML editing, a niche which
currently seems underfilled in Vim land. (As opposed to HTML/XML
*inserting*, for which many plugins are available). Adding, changing,
and removing pairs of tags simultaneously is a breeze.
The `.` command will work with `ds`, `cs`, and `yss` if you install
[repeat.vim](https://github.com/tpope/vim-repeat).
Installation
------------
If you don't have a preferred installation method, I recommend
installing [pathogen.vim](https://github.com/tpope/vim-pathogen), and
then simply copy and paste:
cd ~/.vim/bundle
git clone git://github.com/tpope/vim-surround.git
Once help tags have been generated, you can view the manual with
`:help surround`.
Contributing
------------
See the contribution guidelines for
[pathogen.vim](https://github.com/tpope/vim-pathogen#readme).
Self-Promotion
--------------
Like surround.vim? Follow the repository on
[GitHub](https://github.com/tpope/vim-surround) and vote for it on
[vim.org](http://www.vim.org/scripts/script.php?script_id=1697). And if
you're feeling especially charitable, follow [tpope](http://tpo.pe/) on
[Twitter](http://twitter.com/tpope) and
[GitHub](https://github.com/tpope).
License
-------
Copyright (c) Tim Pope. Distributed under the same terms as Vim itself.
See `:help license`.

View File

@@ -1,6 +1,6 @@
*surround.txt* Plugin for deleting, changing, and adding "surroundings"
Author: Tim Pope <vimNOSPAM@tpope.info> *surround-author*
Author: Tim Pope <http://tpo.pe/>
License: Same terms as Vim itself (see |license|)
This plugin is only available if 'compatible' is not set.
@@ -20,7 +20,7 @@ examples. An asterisk (*) is used to denote the cursor position.
[123+4*56]/2 cs]) (123+456)/2
"Look ma, I'm *HTML!" cs"<q> <q>Look ma, I'm HTML!</q>
if *x>3 { ysW( if ( x>3 ) {
my $str = *whee!; vlllls' my $str = 'whee!';
my $str = *whee!; vllllS' my $str = 'whee!';
While a few features of this plugin will work in older versions of Vim,
Vim 7 is recommended for full functionality.
@@ -50,8 +50,8 @@ below in |surround-replacements|. Once again, examples are in order.
<div>Yo!*</div> cst<p> <p>Yo!</p>
*ys* takes a valid Vim motion or text object as the first object, and wraps
it using the second argument as with |cs|. (Unfortunately there's no good
mnemonic for "ys".)
it using the second argument as with |cs|. (It's a stretch, but a good
mnemonic for "ys" is "you surround".)
Old text Command New text ~
Hello w*orld! ysiw) Hello (world)!
@@ -65,28 +65,19 @@ whitespace.
There is also *yS* and *ySS* which indent the surrounded text and place it
on a line of its own.
In visual mode, a simple "s" with an argument wraps the selection. This is
In visual mode, a simple "S" with an argument wraps the selection. This is
referred to as the *vS* mapping, although ordinarily there will be
additional keystrokes between the v and s. In linewise visual mode, the
additional keystrokes between the v and S. In linewise visual mode, the
surroundings are placed on separate lines and indented. In blockwise visual
mode, each line is surrounded.
A "gS" in visual mode, known as *vgS* , behaves similarly. In linewise visual
mode, the automatic indenting is surpressed. In blockwise visual mode, this
enables surrounding past the end of the like with 'virtualedit' set (there
mode, the automatic indenting is suppressed. In blockwise visual mode, this
enables surrounding past the end of the line with 'virtualedit' set (there
seems to be no way in Vim Script to differentiate between a jagged end of line
selection and a virtual block selected past the end of the line, so two maps
were needed).
Additionally, there is a legacy "s" or *vs* mapping which is basically the
same as |vS|. Due to popular demand of wanting to use "s" as Vim does to mean
replacing the selection (also available as "c"), this mapping is going away.
If you were one of these people and would like to disable "s" with the current
release, indicate this to surround.vim by assigning the "s" mapping to
something else.
>
xmap <Leader>s <Plug>Vsurround
<
*i_CTRL-G_s* *i_CTRL-G_S*
Finally, there is an experimental insert mode mapping on <C-G>s and <C-S>.
Beware that the latter won't work on terminals with flow control (if you
@@ -100,13 +91,11 @@ TARGETS *surround-targets*
The |ds| and |cs| commands both take a target as their first argument. The
possible targets are based closely on the |text-objects| provided by Vim.
In order for a target to work, the corresponding text object must be
supported in the version of Vim used (Vim 7 adds several text objects, and
thus is highly recommended). All targets are currently just one character.
All targets are currently just one character.
Eight punctuation marks, (, ), {, }, [, ], <, and >, represent themselves
and their counterparts. If the opening mark is used, contained whitespace is
also trimmed. The targets b, B, r, and a are aliases for ), }, ], and >
also trimmed. The targets b, B, r, and a are aliases for ), }, ], and >
(the first two mirror Vim; the second two are completely arbitrary and
subject to change).
@@ -128,7 +117,7 @@ however, newlines are sometimes added and/or removed.
REPLACEMENTS *surround-replacements*
A replacement argument is a single character, and is required by |cs|, |ys|,
and |vs|. Undefined replacement characters (with the exception of alphabetic
and |vS|. Undefined replacement characters (with the exception of alphabetic
characters) default to placing themselves at the beginning and end of the
destination, which can be useful for characters like / and |.
@@ -144,15 +133,9 @@ attributes here and they will be stripped from the closing tag. End your
input by pressing <CR> or >. If <C-T> is used, the tags will appear on lines
by themselves.
A deprecated replacement of a LaTeX environment is provided on \ and l. The
name of the environment and any arguments will be input from a prompt. This
will be removed once a more fully functional customization system is
implemented. The following shows the resulting environment from
csp\tabular}{lc<CR>
>
\begin{tabular}{lc}
\end{tabular}
<
If s is used, a leading but not trailing space is added. This is useful for
removing parentheses from a function call with csbs.
CUSTOMIZING *surround-customizing*
The following adds a potential replacement on "-" (ASCII 45) in PHP files.

View File

@@ -1,28 +1,13 @@
" surround.vim - Surroundings
" Author: Tim Pope <vimNOSPAM@tpope.org>
" Version: 1.90
" Author: Tim Pope <http://tpo.pe/>
" Version: 2.0
" GetLatestVimScripts: 1697 1 :AutoInstall: surround.vim
"
" See surround.txt for help. This can be accessed by doing
"
" :helptags ~/.vim/doc
" :help surround
"
" Licensed under the same terms as Vim itself.
" ============================================================================
" Exit quickly when:
" - this plugin was already loaded or disabled
" - when 'compatible' is set
if (exists("g:loaded_surround") && g:loaded_surround) || &cp
if exists("g:loaded_surround") || &cp || v:version < 700
finish
endif
let g:loaded_surround = 1
let s:cpo_save = &cpo
set cpo&vim
" Input functions {{{1
function! s:getchar()
@@ -36,10 +21,10 @@ endfunction
function! s:inputtarget()
let c = s:getchar()
while c =~ '^\d\+$'
let c = c . s:getchar()
let c .= s:getchar()
endwhile
if c == " "
let c = c . s:getchar()
let c .= s:getchar()
endif
if c =~ "\<Esc>\|\<C-C>\|\0"
return ""
@@ -49,10 +34,9 @@ function! s:inputtarget()
endfunction
function! s:inputreplacement()
"echo '-- SURROUND --'
let c = s:getchar()
if c == " "
let c = c . s:getchar()
let c .= s:getchar()
endif
if c =~ "\<Esc>" || c =~ "\<C-C>"
return ""
@@ -91,19 +75,9 @@ function! s:extractafter(str)
endif
endfunction
function! s:repeat(str,count)
let cnt = a:count
let str = ""
while cnt > 0
let str = str . a:str
let cnt = cnt - 1
endwhile
return str
endfunction
function! s:fixindent(str,spc)
let str = substitute(a:str,'\t',s:repeat(' ',&sw),'g')
let spc = substitute(a:spc,'\t',s:repeat(' ',&sw),'g')
let str = substitute(a:str,'\t',repeat(' ',&sw),'g')
let spc = substitute(a:spc,'\t',repeat(' ',&sw),'g')
let str = substitute(str,'\(\n\|\%^\).\@=','\1'.spc,'g')
if ! &et
let str = substitute(str,'\s\{'.&ts.'\}',"\t",'g')
@@ -113,15 +87,14 @@ endfunction
function! s:process(string)
let i = 0
while i < 7
let i = i + 1
for i in range(7)
let repl_{i} = ''
let m = matchstr(a:string,nr2char(i).'.\{-\}\ze'.nr2char(i))
if m != ''
let m = substitute(strpart(m,1),'\r.*','','')
let repl_{i} = input(substitute(m,':\s*$','','').': ')
endif
endwhile
endfor
let s = ""
let i = 0
while i < strlen(a:string)
@@ -129,7 +102,7 @@ function! s:process(string)
if char2nr(char) < 8
let next = stridx(a:string,char,i+1)
if next == -1
let s = s . char
let s .= char
else
let insertion = repl_{char2nr(char)}
let subs = strpart(a:string,i+1,next-i-1)
@@ -140,13 +113,13 @@ function! s:process(string)
let r = stridx(sub,"\r")
let insertion = substitute(insertion,strpart(sub,0,r),strpart(sub,r+1),'')
endwhile
let s = s . insertion
let s .= insertion
let i = next
endif
else
let s = s . char
let s .= char
endif
let i = i + 1
let i += 1
endwhile
return s
endfunction
@@ -154,6 +127,7 @@ endfunction
function! s:wrap(string,char,type,...)
let keeper = a:string
let newchar = a:char
let s:tag = ""
let type = a:type
let linemode = type ==# 'V' ? 1 : 0
let special = a:0 ? a:1 : 0
@@ -164,7 +138,6 @@ function! s:wrap(string,char,type,...)
else
let initspaces = matchstr(getline('.'),'\%^\s*')
endif
" Duplicate b's are just placeholders (removed)
let pairs = "b()B{}r[]a<>"
let extraspace = ""
if newchar =~ '^ '
@@ -186,11 +159,17 @@ function! s:wrap(string,char,type,...)
elseif newchar ==# "p"
let before = "\n"
let after = "\n\n"
elseif newchar ==# 's'
let before = ' '
let after = ''
elseif newchar ==# ':'
let before = ':'
let after = ''
elseif newchar =~# "[tT\<C-T><,]"
let dounmapp = 0
let dounmapb = 0
if !maparg(">","c")
let dounmapb= 1
let dounmapb = 1
" Hide from AsNeeded
exe "cn"."oremap > <CR>"
endif
@@ -206,8 +185,10 @@ function! s:wrap(string,char,type,...)
if dounmapb
silent! cunmap >
endif
let s:tag = tag
if tag != ""
let tag = substitute(tag,'>*$','','')
let s:tag = tag . '>'
let before = '<'.tag.'>'
if tag =~ '/$'
let after = ''
@@ -216,7 +197,7 @@ function! s:wrap(string,char,type,...)
endif
if newchar == "\<C-T>" || newchar == ","
if type ==# "v" || type ==# "V"
let before = before . "\n\t"
let before .= "\n\t"
endif
if type ==# "v"
let after = "\n". after
@@ -227,28 +208,26 @@ function! s:wrap(string,char,type,...)
" LaTeX
let env = input('\begin{')
let env = '{' . env
let env = env . s:closematch(env)
let env .= s:closematch(env)
echo '\begin'.env
if env != ""
let before = '\begin'.env
let after = '\end'.matchstr(env,'[^}]*').'}'
endif
"if type ==# 'v' || type ==# 'V'
"let before = before ."\n\t"
"endif
"if type ==# 'v'
"let after = "\n".initspaces.after
"endif
elseif newchar ==# 'f' || newchar ==# 'F'
let fnc = input('function: ')
if fnc != ""
let before = substitute(fnc,'($','','').'('
let after = ')'
if newchar ==# 'F'
let before = before . ' '
let after = ' ' . after
let before .= ' '
let after = ' ' . after
endif
endif
elseif newchar ==# "\<C-F>"
let fnc = input('function: ')
let before = '('.fnc.' '
let after = ')'
elseif idx >= 0
let spc = (idx % 3) == 1 ? " " : ""
let idx = idx / 3 * 3
@@ -264,9 +243,7 @@ function! s:wrap(string,char,type,...)
let before = ''
let after = ''
endif
"let before = substitute(before,'\n','\n'.initspaces,'g')
let after = substitute(after ,'\n','\n'.initspaces,'g')
"let after = substitute(after,"\n\\s*\<C-U>\\s*",'\n','g')
if type ==# 'V' || (special && type ==# "v")
let before = substitute(before,' \+$','','')
let after = substitute(after ,'^ \+','','')
@@ -274,14 +251,14 @@ function! s:wrap(string,char,type,...)
let after = initspaces.after
endif
if keeper !~ '\n$' && after !~ '^\n'
let keeper = keeper . "\n"
let keeper .= "\n"
elseif keeper =~ '\n$' && after =~ '^\n'
let after = strpart(after,1)
endif
if before !~ '\n\s*$'
let before = before . "\n"
let before .= "\n"
if special
let before = before . "\t"
let before .= "\t"
endif
endif
endif
@@ -321,21 +298,18 @@ endfunction
function! s:insert(...) " {{{1
" Optional argument causes the result to appear on 3 lines, not 1
"call inputsave()
let linemode = a:0 ? a:1 : 0
let char = s:inputreplacement()
while char == "\<CR>" || char == "\<C-S>"
" TODO: use total count for additional blank lines
let linemode = linemode + 1
let linemode += 1
let char = s:inputreplacement()
endwhile
"call inputrestore()
if char == ""
return ""
endif
"call inputsave()
let cb_save = &clipboard
set clipboard-=unnamed
set clipboard-=unnamed clipboard-=unnamedplus
let reg_save = @@
call setreg('"',"\r",'v')
call s:wrapreg('"',char,linemode)
@@ -350,9 +324,6 @@ function! s:insert(...) " {{{1
if exists("g:surround_insert_tail")
call setreg('"',g:surround_insert_tail,"a".getregtype('"'))
endif
"if linemode
"call setreg('"',substitute(getreg('"'),'^\s\+','',''),'c')
"endif
if col('.') >= col('$')
norm! ""p
else
@@ -400,7 +371,7 @@ function! s:dosurround(...) " {{{1
endif
endif
let cb_save = &clipboard
set clipboard-=unnamed
set clipboard-=unnamed clipboard-=unnamedplus
let append = ""
let original = getreg('"')
let otype = getregtype('"')
@@ -454,7 +425,7 @@ function! s:dosurround(...) " {{{1
else
let pcmd = "P"
endif
if line('.') < oldlnum && regtype ==# "V"
if line('.') + 1 < oldlnum && regtype ==# "V"
let pcmd = "p"
endif
call setreg('"',keeper,regtype)
@@ -468,13 +439,13 @@ function! s:dosurround(...) " {{{1
if getline('.') =~ '^\s\+$' && keeper =~ '^\s*\n'
silent norm! cc
endif
call setreg('"',removed,regtype)
call setreg('"',original,otype)
let s:lastdel = removed
let &clipboard = cb_save
if newchar == ""
silent! call repeat#set("\<Plug>Dsurround".char,scount)
else
silent! call repeat#set("\<Plug>Csurround".char.newchar,scount)
silent! call repeat#set("\<Plug>Csurround".char.newchar.s:tag,scount)
endif
endfunction " }}}1
@@ -499,10 +470,9 @@ function! s:opfunc(type,...) " {{{1
let sel_save = &selection
let &selection = "inclusive"
let cb_save = &clipboard
set clipboard-=unnamed
set clipboard-=unnamed clipboard-=unnamedplus
let reg_save = getreg(reg)
let reg_type = getregtype(reg)
"call setreg(reg,"\n","c")
let type = a:type
if a:type == "char"
silent exe 'norm! v`[o`]"'.reg.'y'
@@ -511,6 +481,7 @@ function! s:opfunc(type,...) " {{{1
silent exe 'norm! `[V`]"'.reg.'y'
let type = 'V'
elseif a:type ==# "v" || a:type ==# "V" || a:type ==# "\<C-V>"
let &selection = sel_save
let ve = &virtualedit
if !(a:0 && a:1)
set virtualedit=
@@ -547,7 +518,9 @@ function! s:opfunc(type,...) " {{{1
let &selection = sel_save
let &clipboard = cb_save
if a:type =~ '^\d\+$'
silent! call repeat#set("\<Plug>Y".(a:0 && a:1 ? "S" : "s")."surround".char,a:type)
silent! call repeat#set("\<Plug>Y".(a:0 && a:1 ? "S" : "s")."surround".char.s:tag,a:type)
else
silent! call repeat#set("\<Plug>SurroundRepeat".char.s:tag)
endif
endfunction
@@ -571,6 +544,7 @@ function! s:closematch(str) " {{{1
endif
endfunction " }}}1
nnoremap <silent> <Plug>SurroundRepeat .
nnoremap <silent> <Plug>Dsurround :<C-U>call <SID>dosurround(<SID>inputtarget())<CR>
nnoremap <silent> <Plug>Csurround :<C-U>call <SID>changesurround()<CR>
nnoremap <silent> <Plug>Yssurround :<C-U>call <SID>opfunc(v:count1)<CR>
@@ -578,48 +552,26 @@ nnoremap <silent> <Plug>YSsurround :<C-U>call <SID>opfunc2(v:count1)<CR>
" <C-U> discards the numerical argument but there's not much we can do with it
nnoremap <silent> <Plug>Ysurround :<C-U>set opfunc=<SID>opfunc<CR>g@
nnoremap <silent> <Plug>YSurround :<C-U>set opfunc=<SID>opfunc2<CR>g@
vnoremap <silent> <Plug>Vsurround :<C-U>call <SID>opfunc(visualmode())<CR>
vnoremap <silent> <Plug>VSurround :<C-U>call <SID>opfunc(visualmode(),visualmode() ==# 'V' ? 1 : 0)<CR>
vnoremap <silent> <Plug>VgSurround :<C-U>call <SID>opfunc(visualmode(),visualmode() ==# 'V' ? 0 : 1)<CR>
inoremap <silent> <Plug>Isurround <C-R>=<SID>insert()<CR>
inoremap <silent> <Plug>ISurround <C-R>=<SID>insert(1)<CR>
if !exists("g:surround_no_mappings") || ! g:surround_no_mappings
nmap ds <Plug>Dsurround
nmap cs <Plug>Csurround
nmap ys <Plug>Ysurround
nmap yS <Plug>YSurround
nmap yss <Plug>Yssurround
nmap ySs <Plug>YSsurround
nmap ySS <Plug>YSsurround
if !hasmapto("<Plug>Vsurround","v") && !hasmapto("<Plug>VSurround","v")
if exists(":xmap")
xmap s <Plug>Vsurround
else
vmap s <Plug>Vsurround
endif
endif
if !hasmapto("<Plug>VSurround","v")
if exists(":xmap")
xmap S <Plug>VSurround
else
vmap S <Plug>VSurround
endif
endif
if exists(":xmap")
xmap gS <Plug>VgSurround
else
vmap gS <Plug>VgSurround
endif
nmap ds <Plug>Dsurround
nmap cs <Plug>Csurround
nmap ys <Plug>Ysurround
nmap yS <Plug>YSurround
nmap yss <Plug>Yssurround
nmap ySs <Plug>YSsurround
nmap ySS <Plug>YSsurround
xmap S <Plug>VSurround
xmap gS <Plug>VgSurround
if !hasmapto("<Plug>Isurround","i") && "" == mapcheck("<C-S>","i")
imap <C-S> <Plug>Isurround
endif
imap <C-G>s <Plug>Isurround
imap <C-G>S <Plug>ISurround
"Implemented internally instead
"imap <C-S><C-S> <Plug>ISurround
endif
let &cpo = s:cpo_save
" vim:set ft=vim sw=2 sts=2 et: