Wednesday, March 4, 2015

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

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.)

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