Wednesday, March 4, 2015

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

On Wednesday, March 4, 2015 at 1:29:15 PM UTC-6, ZyX wrote:
> 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.

Ok thanks that's very helpful. Highlighting by hand and formatting with `gq' does the same thing. (As does QuQ also.) So I suppose this function is not the direct problem.

--
--
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:

Post a Comment