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.EricOn 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.EricOn 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,EricOn Wednesday 5 May 2010 at 10:23:52 UTC-4 David Fishburn wrote:On Tue, May 4, 2010 at 7:23 PM, discipulus <ger...@gmail.com> 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 vim_use+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/510200d6-5bee-4f14-b2e4-61b0ba974bf2n%40googlegroups.com.
No comments:
Post a Comment