vim-surround icon indicating copy to clipboard operation
vim-surround copied to clipboard

Add dictionary for user can add custom mapping rule.

Open t9md opened this issue 14 years ago • 4 comments

introduce g:surround_custom_mapping dictionary which help filetype based custom mapping.

I hope this mini utility for surround.vim is bundled in orignal surround.vim. User can easily add custom mapping rule for each &filetype or global scope based.

configuration example

let g:surround_custom_mapping = {}"{{{
let g:surround_custom_mapping._ = {
            \ 'p':  "<pre> \r </pre>",
            \ 'w':  "%w(\r)",
            \ }
let g:surround_custom_mapping.help = {
            \ 'p':  "> \r <",
            \ }
let g:surround_custom_mapping.ruby = {
            \ '-':  "<% \r %>",
            \ '=':  "<%= \r %>",
            \ '9':  "(\r)",
            \ '5':  "%(\r)",
            \ '%':  "%(\r)",
            \ 'w':  "%w(\r)",
            \ '#':  "#{\r}",
            \ '3':  "#{\r}",
            \ 'e':  "begin \r end",
            \ 'E':  "<<EOS \r EOS",
            \ 'i':  "if \1if\1 \r end",
            \ 'u':  "unless \1unless\1 \r end",
            \ 'c':  "class \1class\1 \r end",
            \ 'm':  "module \1module\1 \r end",
            \ 'd':  "def \1def\1\2args\r..*\r(&)\2 \r end",
            \ 'p':  "\1method\1 do \2args\r..*\r|&| \2\r end",
            \ 'P':  "\1method\1 {\2args\r..*\r|&|\2 \r }",
            \ }
let g:surround_custom_mapping.javascript = {
            \ 'f':  "function(){ \r }"
            \ }
let g:surround_custom_mapping.lua = {
            \ 'f':  "function(){ \r }"
            \ }
let g:surround_custom_mapping.python = {
            \ 'p':  "print( \r)",
            \ '[':  "[\r]",
            \ }
let g:surround_custom_mapping.vim= {
            \'f':  "function! \r endfunction"
            \ }

t9md avatar Jul 16 '11 14:07 t9md

This is already possible with global and buffer-local variables.

graywh avatar Jul 18 '11 18:07 graywh

graywh , I know that, I use it's global and buffer-local variables.

The purpose of my change is that user don't need to use char2nr and user can use dictonary to define filetype specific custom mapping.
In Filetype autocmd dictonary value for &filetype is processed to define custome mapping.

t9md avatar Jul 18 '11 21:07 t9md

Back when I first wrote surround.vim, Vim 7 was new and Vim 6 was still commonly provided with OS distributions. I strove to make surround.vim strictly backwards compatible (even though this meant only a subset of the functionality worked) so that I could still make use of it on servers an whatnot. Those days are long behind us, so for a while now I've had ambitious plans which included a hash like syntax for customization.

A couple of differences in my vision:

  • Instead of merely wrapping the old interface (and mapping the hash to variables), I want it to be first class. You should be able to modify the hash and have surroundings show up instantly.
  • I'd rather have per-buffer hashes than per-filetype hashes, as their a bit more flexible. If I do add the latter, it will leverage the former.

Now that I'm finally getting on top of my open source stuff, hopefully you'll see progress on this in the next month or two. I'll leave the pull request open until then.

tpope avatar Aug 07 '11 04:08 tpope

I'm happy to hear your ambitious plan to support hash like customization.
I'm looking forward to see your new version of surround.vim!! Thanks.

t9md avatar Aug 07 '11 05:08 t9md