2015-06-24 0:02 GMT+03:00 Ben Fritz <[email protected]>:
> On Tuesday, June 23, 2015 at 3:35:50 PM UTC-5, Ben Fritz wrote:
>> I'm working on a custom command to add strikethrough to text, using the 
>> Unicode COMBINING LONG STROKE OVERLAY, 0x0336.
>>
>> In this command, I want to apply a strikethrough to a character, only if it 
>> is not already present.
>>
>> This pattern fails because it doesn't match *anything* with regexpengine set 
>> to 2, it does not match an unadorned character immediately before a 
>> struck-through base character, and it *does* match the last combining 
>> character in a word for some reason:
>>
>>     [^\u0336]\%u0336\@!
>>
>> This pattern also fails, because it matches already struck-through base 
>> characters for some reason (although it does the same thing in both engines):
>>
>>     [^\u0336][^\u0336]\@=
>>
>> What is the correct way to do this?
>>
>> Full command (attempted):
>>
>>     '<,'>s;\%#=1\%V[^\u0336]\%u0336\@!;\=submatch(0)."\u0336";g
>>
>> Note, how I'm also limiting to a visual selection; so I'm trying to use the 
>> :s command for simplicity.
>
> My next attempt is to do two passes, first to remove the combining character 
> from everywhere in the visual selection, and then to add it to the entire 
> visual selection.
>
> But, my patterns for this task either don't match at all, or they remove the 
> base character along with the combining character! Even this doesn't work, it 
> removes the base character:
>
>     echo join(split(getline('.'), "\u0336"),"")

Though there is always one hack to get exactly one unicode codepoint
from *valid* UTF-8 string:

    echo nr2char(char2nr(string[position :]))

. You can use `len(nr2char(…))` to get the length of the first
character and thus get to the second. I think this will allow you to
construct needed \= expression, but the result would most likely be a
definition of a new function due to its complexity.

>
> --
> --
> 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].
> For more options, visit https://groups.google.com/d/optout.

-- 
-- 
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].
For more options, visit https://groups.google.com/d/optout.

Reply via email to