On May 23, 2014 3:19 PM, "John Little" <[email protected]> wrote:
>
> On Friday, May 23, 2014 10:36:56 AM UTC+12, Nate Soares wrote:
> > Is there a way to get the expansion of a digraph (entered e.g. with ^K
in insert mode) programatically?
>
> There isn't a vim script way to do this directly. I can think of two
ways, one somewhat unclean, the other pedestrian.
>
> Firstly, this approach may have side effects, might spoil your screen
layout, and harm innocent animals:
>
> function! ExpandDigraph(dig)
> if a:dig !~ '^..$'
> return ""
> endif
> new
> exe "norm! a\<c-k>" . a:dig . "\<esc>"
> let result = getline(".")
> close!
> return result
> endfunc
Digraphs work also in Ex mode. So I would rather use it, CTRL-\ e and
getcmdline() are your friends here: this way there are no or almost no
side-effects. At least I do not know any side-effects other then inevitable
things like heating the processor a bit. Example I used to test CTRL-K . .
expansion:
execute 'normal!' ":\<C-k>..\<C-\>eextend(g:, {'digraph':
getcmdline()}).digraph\n"
This even did not alter cmd and expr history (it would if I typed :normal!
argument myself).
>
> Secondly: capture the output of the command :digraph, (:help redir) and
reformat it to one column (that's tricky because there's lots of funny
characters), and write it to a file, say "digraphs.txt". Then,
>
> function! ExpandDigraph(dig)
> if !exists("s:digs")
> let s:digs = {}
> for line in readfile("digraphs.txt")
> let s:digs[line[0:1]] = line[3:]
> endfor
> endif
> return has_key(s:digs, a:dig) ? s:digs[a:dig] : ""
> endfunc
>
> > For example, I have vim set up to insert the ellipsis character '…'
when I type "^K..". Is there a way, programatically, to write a function
ExpandDigraph such that ExpandDigraph("..") yields "…"?
>
> BTW, with my vim 7.4.274 on linux ".." is a digraph for "‥" U+2025 TWO
DOT LEADER, not an ellipsis, "…" U+2026 HORIZONTAL ELLIPSIS. My vim only
has digraphs for U+22EF MIDLINE HORIZONTAL ELLIPSIS and U+22EE VERTICAL
ELLIPSIS. If you've defined your own digraphs, and you use my second
approach you'd have to add yours to the file.
>
> Regards, John Little
>
> --
> --
> 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.