Wednesday, March 4, 2015

Re: Can you explain to me what this script is doing?

2015-03-04 16:04 GMT+03:00 at <atorgovitsky@gmail.com>:
>
> On Tuesday, March 3, 2015 at 10:37:12 AM UTC-6, ZyX wrote:
> > 2015-03-03 17:17 GMT+03:00 at <atorgo...@gmail.com>:
> > I found the following code on a stackexchange post: http://tex.stackexchange.com/questions/1548/intelligent-paragraph-reflowing-in-vim
> >
> >
> >
> > The code is for environment-aware formatting in LaTeX.
> >
> >
> >
> > It's not longer working quite the way I want it---I think it is interacting with one of my other plugins that has been updated---so I'd like to try to modify it. However I don't have a great knowledge of the Vim scripting language, so I don't really understand what's going on in the code. Could someone explain it to me?
> >
> >
> >
> > You better explain how it is interacting. Based on the kind of interaction it may appear that you need to know only a few lines. The code below simply selects lines between some lines like `\start`…` \start` and tells Vim to reformat them.
> >
> >
> > Basically you need to know `:h range`, `:h gq` and, if you still don't understand other code, `:h :{command}` where `:{command}` is a lowercase letter sequence at the start of the line with colon prepended.
> >
> >
> >
> > Alternatively/additionally, if you have a good solution for formatting in LaTeX, please share!
> >
> >
> >
> > Here's the code. It's also on the Stackexchange post in case the formatting gets messed up:
> >
> >
> >
> > " Reformat lines (getting the spacing correct) {{{
> >
> > fun! TeX_fmt()
> >
> > if (getline(".") != "")
> >
> > let save_cursor = getpos(".")
> >
> > let op_wrapscan = &wrapscan
> >
> > set nowrapscan
> >
> > let par_begin = '^\(%D\)\=\s*\($\|\\start\|\\stop\|\\Start\|\\Stop\|\\\(sub\)*section\>\|\\item\>\|\\NC\>\|\\blank\>\|\\noindent\>\)'
> >
> > let par_end = '^\(%D\)\=\s*\($\|\\start\|\\stop\|\\Start\|\\Stop\|\\place\|\\\(sub\)*section\>\|\\item\>\|\\NC\>\|\\blank\>\)'
> >
> > try
> >
> > exe '?'.par_begin.'?+'
> >
> > catch /E384/
> >
> > 1
> >
> > endtry
> >
> > norm V
> >
> > try
> >
> > exe '/'.par_end.'/-'
> >
> > catch /E385/
> >
> > $
> >
> > endtry
> >
> > norm gq
> >
> > let &wrapscan = op_wrapscan
> >
> > call setpos('.', save_cursor)
> >
> > endif
> >
> > endfun
> >
> >
> >
> > nmap Q :call TeX_fmt()<CR>
> >
> >
> >
> > --
> >
> > --
> >
> > 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+u...@googlegroups.com.
> >
> > For more options, visit https://groups.google.com/d/optout.
>
> First, let me mention one thing I forgot to add---I modified the script according to the Stackexchange comment by "wmnorth" (see third comment down on that post)
>
> The specific behavior is difficult to pin/down replicate. But the general problem is that I will have a block of text that looks like:
>
> \begin{proof}
> blah blah blah
> blah blah $a = b$
> blah blah
> \end{proof}
>
> but typically has many more lines than that.
>
> When I call this script in normal mode with the cursor on the interior part of the begin/end proof block, sometimes the indenting will be destroyed. Again, it's not always, and I haven't been able to isolate a minimal working example. (It also does not only happen with "proof" but also happens with other begin/end pairs.)

I believe indenting is destroyed if you select these inner parts by
hand and do `gq`. If that is true you don't need to do anything with
your script, just bug other plugin's authors with a working example
once you find a way to isolate it. If that is false this is weird
because script you use is pretty simple.

By the way, does "sometimes" mean "QuQ" gives different result? (I.e.
does repeating the same action on the same text (after undo) yield
different results?)

// I would've written it simpler and more robust though: this script
is breaking a few best practices and uses strange methods for
selecting a region.

>
> --
> --
> 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.
> 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 vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: