![vim“gq}”命令重新换行段落,以及LaTeX](https://linux22.com/image/1314184/vim%E2%80%9Cgq%7D%E2%80%9D%E5%91%BD%E4%BB%A4%E9%87%8D%E6%96%B0%E6%8D%A2%E8%A1%8C%E6%AE%B5%E8%90%BD%EF%BC%8C%E4%BB%A5%E5%8F%8ALaTeX.png)
我怎样才能让这个命令不包装类似的东西\item
?
例如:
\begin{enumerate}
\item this might be a long paragraph that spans multiple lines
\item blah
\end{enumerate}
如果我将光标放在第一个项目(的首字母this
)上并运行“gq}”,它会产生以下输出:
\begin{enumerate}
\item this might be a long
paragraph that spans multiple
lines \item blah \end{enumerate}
这就是我要的:
\begin{enumerate}
\item this might be a long
paragraph that spans multiple
lines
\item blah
\end{enumerate}
如果我能让 vim 识别出该标记\item
表示段落的结束,我想它就能正常工作。但是我该怎么做呢?
答案1
我认为你可以通过将“formatlistpat”选项设置为包含段落分隔标签来实现这一点。你需要在“formatoptions”中包含“n”才能实现这一点。请参阅
:help 'formatlistpat'
:help 'formatoptions'
例如,
:set formatlistpat=^\\s*\\\\\\(end\\\\|item\\)\\>
:set formatoptions+=n
:set textwidth=40
格式化您的示例会产生以下结果:
\开始{枚举} \item 这可能是一个很长的段落 跨越多行 \item 等等 \end{枚举}
请注意,第一项的第二行按标签的长度缩进\item
,因此它不是您想要的,但可能足够接近。您还可以尝试\ze
帮助中提到的方法,看看是否可以让 Vim 识别标签而不缩进后续行。我没有尝试过。
更新
:let
如果使用而不是 来设置,“formatlistpat”会更清晰一些,也更容易编辑:set
。
:let &l:flp = '^\s*\\\(end\|item\)\>'
该l:
部分指定它是一个缓冲区本地设置。
更新
要将缩进减少到 1 个字符,请执行以下操作:
:let &l:flp = '^\s*\\\ze\(end\|item\)\>'
请注意,如果 之前有任何空格\item
,则缩进量将变为该数字 + 1。我不知道是否可以使用 将缩进量减少到 0 \ze
。
答案2
这是对我有用的解决方案。我编写了一个外部脚本来处理 latex 文本的格式(https://github.com/elmanuelito/par-latex)
vim 中的使用示例:
- 选择一些文本(例如
Vj
或ggVG
) - 输入“:!par-latex”(vim 命令行如下所示
'<,'>!par-latex
:) - 输入回车
使用默认选项,如果您在 itemize 环境中选择文本,它将处理您的示例。要让它在您选择更多文本时工作,您需要format_inside_group
在脚本开头激活该选项。