So ... I've added the function to my vimrc, and that works as "advertised". Thank you for that.
One annoying interraction is gvim always giving the "* :'<,'>* " prompt when I want to call the function in VISUAL mode. Is there something I could add to the function to suppress the *'' '<,'> "*, either a manual toggle off/on before I start using the command, or something to block that after the first instance of the function call, and auto-reinstate after about 1 minute after the last function call? Eric On Wednesday 28 February 2024 at 16:15:14 UTC-5 Eric Marceau wrote: > I forgot to say that I was hoping that using the "*repeat last*" > function, namely the "*.*", would apply that modified command at the next > text location where a new string is highlited. > > Eric > > On Wednesday 28 February 2024 at 16:12:30 UTC-5 Eric Marceau wrote: > >> 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/510200d6-5bee-4f14-b2e4-61b0ba974bf2n%40googlegroups.com.
