1. Audrius Kažukauskas
  2. dotvim

Commits

Audrius Kažukauskas  committed 86b5a3e

Upgrade to surround.vim 2.0.

  • Participants
  • Parent commits beebd0e
  • Branches default

Comments (0)

Files changed (3)

File doc/surround.txt

View file
 *surround.txt*  Plugin for deleting, changing, and adding "surroundings"
 
-Author:  Tim Pope <vimNOSPAM@tpope.org>         *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.
   [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.
 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
 
 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
 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 |.
 
 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.

File doc/tags

View file
 sideways-issues	sideways.txt	/*sideways-issues*
 sideways-usage	sideways.txt	/*sideways-usage*
 surround	surround.txt	/*surround*
-surround-author	surround.txt	/*surround-author*
 surround-customizing	surround.txt	/*surround-customizing*
 surround-issues	surround.txt	/*surround-issues*
 surround-mappings	surround.txt	/*surround-mappings*
 visualrepeat-usage	visualrepeat.txt	/*visualrepeat-usage*
 visualrepeat.txt	visualrepeat.txt	/*visualrepeat.txt*
 visualrepeat.vim	visualrepeat.txt	/*visualrepeat.vim*
-vs	surround.txt	/*vs*
 xml-plugin-callbacks	xml-plugin.txt	/*xml-plugin-callbacks*
 xml-plugin-html	xml-plugin.txt	/*xml-plugin-html*
 xml-plugin-mappings	xml-plugin.txt	/*xml-plugin-mappings*

File plugin/surround.vim

View file
 " 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()
 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 ""
 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 ""
   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')
 
 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)
     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)
           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
 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
   else
     let initspaces = matchstr(getline('.'),'\%^\s*')
   endif
-  " Duplicate b's are just placeholders (removed)
   let pairs = "b()B{}r[]a<>"
   let extraspace = ""
   if newchar =~ '^ '
   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
     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 = ''
       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
     " 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
     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 ,'^ \+','','')
       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
 
 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 clipboard-=unnamedplus
   let reg_save = @@
   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
   else
     let pcmd = "P"
   endif
-  if line('.') < oldlnum && regtype ==# "V"
+  if line('.') + 1 < oldlnum && regtype ==# "V"
     let pcmd = "p"
   endif
   call setreg('"',keeper,regtype)
   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
 
   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'
   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
 
   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>
 " <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: