Как сделать так, чтобы эта команда не оборачивала такие вещи, как \item
?
Например:
\begin{enumerate}
\item this might be a long paragraph that spans multiple lines
\item blah
\end{enumerate}
Если я запущу «gq}» с курсором на первом элементе (первая буква this
), то выведу следующий результат:
\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', которая включает теги-разделители абзацев. Вам нужно включить 'n' в 'formatoptions', чтобы это сработало. Смотрите
:help 'formatlistpat'
:help 'formatoptions'
Например, с
:set formatlistpat=^\\s*\\\\\\(end\\\\|item\\)\\>
:set formatoptions+=n
:set textwidth=40
форматирование вашего примера дает следующее:
\begin{перечислить} \item это может быть длинный абзац который охватывает несколько строк \item бла \end{перечислить}
Обратите внимание, что вторая строка первого пункта отступлена на длину тега \item
, так что это не совсем то, что вы хотели, но может быть достаточно близко. Вы также можете поэкспериментировать с \ze
тем, что указано в справке, чтобы посмотреть, сможете ли вы заставить Vim распознать тег без отступа последующих строк. Я этого не пробовал.
Обновлять
«Formatlistpat» немного понятнее и его легче редактировать, если его задать с помощью :let
вместо :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
) - введите Enter
С параметрами по умолчанию он обработает ваш пример, если вы выберете текст в среде itemize. Чтобы он сработал, когда вы выберете больше текста, вам нужно будет активировать опцию format_inside_group
в начале скрипта.