Tony Mechelynck wrote:
s/\c[scujgh]x/\=get({
'sx':'ŝ',
'cx':'ĉ',
'ux':'ŭ',
'jx':'ĵ',
'gx':'ĝ',
'hx':'ĥ',
'SX':'Ŝ',
'CX':'Ĉ',
'UX':'Ŭ',
'JX':'Ĵ',
'GX':'Ĝ',
'HX':'Ĥ'
}, submatch(0), '??default??')/g
(which should have the benefit of a linear lookup time, and is a lot
less hassle to maintain, IMHO)
For the default ("not found in table"), I'd just use submatch(0) again,
i.e., "don't change".
Oh, duh...that's so obvious in retrospect. Glad I've got you to
keep me in line :-)
Oh, and for logarithmic time my solution could use dichotomic searching
(taking advantage of the fact that both the result_if_true and the
result_if_false of a ?: construct can in turn be ?: expressions, each of
which can, etc.) but for such a small set of possibilities I don't think
there would be a very big performance gain.
I'm not sure how vim compiles expressions, and if, in my
suggestion, the in-line dict is created at every substitution, or
it's just parsed once and then reused internally -- that could
have a grave impact on my suggested solution. However it could
be mitigated by setting it up as an external constant (being
evaluated/compiled just once) dict and then just referenced in
the :s command if performance is a big deal. Though I agree with
your base premise that "for such a small set of possibilities",
we're arguing the number of angels on a pinhead. "this 3 second
operation took me 3.0001ms with Tim's solution and 3.0002ms with
Tony's solution"...time we've clearly thrown out the window
merely by discussing it :-)
-tim
--
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
To unsubscribe from this group, send email to vim_use+unsubscribegooglegroups.com or
reply to this email with the words "REMOVE ME" as the subject.