Also, Can someone offer the modified version of that which would permit specifying the desired single tag-string (i.e. 'em') as a parameter for the function call, instead of the open-ended user entry of a string?
I visualize doing something like ':TagSelection em' for the action to be applied without further interaction. Is that possible? Thank you in advance for anyone's contributing that modified code. Eric On Wednesday 28 February 2024 at 15:45:11 UTC-5 Eric Marceau wrote: > Hi David, > > Your posting of the tip dates quite a while ago. > > Any idea if that would still work for vim/gvim 8.1 ? > > Is that added to the ~/.vim/vimrc ? > > Finally, is that action triggered by typing the sequence ':TagSelection' > ? > > Thank you, > > Eric > > On Wednesday 5 May 2010 at 10:23:52 UTC-4 David Fishburn wrote: > >> On Tue, May 4, 2010 at 7:23 PM, discipulus <[email protected]> wrote: >> ... >> > It should have been {span class="sX"}discipulus{/span} >> > >> > I wrote this function just now: >> > >> > function! mytest() >> > let l:current_column=col('.') >> > exe 'normal b' >> > let l:beginning_column=col('.') >> > let l:diff = l:current_column - l:beginning_column + 1 >> > " this relies on the surround plugin >> > exe 'normal vs' >> > endfunction >> > >> > What do you think and thanks for your response! >> >> I wrote my own function specifically to wrap XML tags around some >> highlighted text. If the text is part of a line I wrap it inline. If >> the text (visually selected) spans multiple lines, then I add the tags >> on new lines before and after the text. >> >> I also allow you to add attributes and remove those when adding the >> closing tag. >> >> " Tip #346: Tag Select/Wrapper:/*{{{*/ >> " http://vim.sourceforge.net/tips/tip.php?tip_id=346 >> " Author: David Fishburn >> " These mappings and TagSelection function will allow you to place >> " an XML tag around either the current word, or the current selected >> " text. >> " If the visual select is on a single line, the tag is wrapped >> " around the text <this>way</this>. If the visual select extends >> " over multiple lines, the tag is wrapped around the text >> " <this> >> " way >> " </this> >> " >> " When you are prompted for the tag name, you can enter: >> " Tag name? p class="classname" attri="bute" >> " The select is wrapped with: >> " <p class="classname" attri="bute"> >> " Your selection >> " </p> >> " Notice the attributes have been stripped from the closing tag. >> " >> " Use nmap, not nnoremap, since we do want to use an existing mapping >> nmap ,,, viw,,, >> vnoremap ,,, <Esc>:call TagSelection()<CR> >> >> function! TagSelection() >> let tag = input("Tag name (include attributes)? ") >> >> if strlen(tag) == 0 >> return >> endif >> >> " Save b register >> let saveB = @b >> " <C-R> seems to automatically reindent the line for some filetypes >> " this will disable it until we have applied our changes >> let saveIndent = &indentexpr >> let curl = line(".") >> let curc = col(".") >> let &indentexpr = '' >> >> " If the visual selection is over multiple lines, then place the >> " data between the tags on newlines: >> " <tag> >> " data >> " </tag> >> let newline = '' >> if getline("'>") != getline("'<") >> let newline = "\n" >> let curl = line("'>") >> endif >> >> " Strip off all but the first word in the tag for the end tag >> let @b = newline . substitute( tag, '^[ \t"]*\(\<\S*\>\).*', '<\/\1>\e', >> "" ) >> let curc = curc + strlen(@b) >> exec "normal `>a\<C-R>b" >> >> let @b = substitute( tag, '^[ \t"]*\(\<.*\)', '<\1>\e', "" ) . newline >> let curc = curc + strlen(@b) >> exec "normal `<i\<C-R>b" >> >> " Now format the area >> exec "normal `<V'>j=" >> >> " Restore b register >> let @b = saveB >> let &indentexpr = saveIndent >> >> call cursor(curl, curc) >> endfunction >> " /*}}}*/ >> >> >> If it is of any use to you. >> >> Enjoy. >> Dave >> >> -- >> You received this message from the "vim_use" maillist. >> Do not top-post! Type your reply below the text you are replying to. >> For more information, visit http://www.vim.org/maillist.php >> > -- -- You received this message from the "vim_use" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_use" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/be76c093-185e-49d9-a081-72eae7d89084n%40googlegroups.com.
