On Mon, Jun 22, 2020 at 09:40:38PM EDT, Tim Chase wrote:

Sorry for the delay... needed time for this to sink in (and test)

> In this case because each of the commands involves the :g command, it
> becomes a bit trickier.  I'd likely define a function something like
> 
>   function! Unfootnote()
>     " make all the footnotes on one line
>     $?^$?+,$g/^\[\@!.*\n\[\@!/,/\n\[\|\%$/j
>     " gather the footnotes into b:a
>     let b:a={}
>     $?^$?,$g/\[\d\+\]/let b:a[getline('.')]=getline(line(".")+1)
>     " find all the footnote references
>     " and replace them with the corresponding text
>     1,$?^$?s/\[\d\+]/\='^['.b:a[submatch(0)].']'/g
>   endfunc

Works just fine! I wrapped the function in an if/endif block to make
sure there does exist footnotes in any given file (some of the files do
not have a footnotes section at the bottom)

  :normal gg
  :let b:s=getpos('.')
  " check for the existence of a footnotes
  :silent! normal /\[\d\+]
  :let b:e=getpos('.')
  if b:s[1] != b:e[1]

Testing whether the search was successful which would cause the cursor
to move... Couldn't figure out a nicer way...

> Note how each of those Ex commands we've discussed is a valid command
> in the body of a function as well.  Yet another obscure corner of vim
> that escapes many folks. :-)

That at least hadn't escaped me... so much so that I wasted a couple of
hours trying to figure out why a ':normal /pattern' worked at the prompt
and didn't work when I coded it in a function... the cursor just refused
to budge and no matter how much I tested I couldn't figure out why...
until I calmed down and realized that what I coded was NOT what I had
actually typed at the ex prompt:

  :normal /pattern
     # ex command PLUS <CR> - big difference!

...

> Note that, while the parts of the function are reasonably tested, this
> function itself is largely untested, but *should* be pretty close.

It is perfectly suitable thank you! Without the if/endif block it didn't
break anything... just joined all the lines in the last paragraph of the
file (which didn't matter since I later reflow everything anyway — see
the other function I came up with).

Here's the function I wrote (I could integrate the code to the one you
kindly provided to do it all in one pass):

  function! Delfoot()                                        
    :normal gg
    :let b:s=getpos('.')
    :silent! normal /^$\n\[[0-9]\{1,}]
    :let b:e=getpos('.')
    if b:s[1] != b:e[1]
      :let b:f=expand('%:t') 
      :let b:fn='../ftns/ft'.b:f[2:5].'.txt'
      :execute ".,$w " b:fn
      :execute ".,$d"
    endif
    :set tw=78
    :normal ggVGgq
  endfunc                                                       

Nothing clever about this one! :-) ... I backup the foonote section at
the end of each file before I do away with it (and reflow everything to
a sensible textwidth to finish off the job so the files are ready for
edit/proofreading).

> Hopefully this both makes sense and helps level up your vim, letting
> you get drunk on this new-found power. :-)

Made up for that depressing feeling I get whenever I venture into vim
script coding and realize I have forgotten the little I know.

I eventually found a vim fandom article that has some examples of what
can be done with syntaxically built ranges 

Thank,

CJ

-- 
-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/20200626204633.GA4819%40turki.local.

Reply via email to