我怎麼能讓這個指令不換行之類的東西\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 這可能是個很長的段落 跨越多行 \項目廢話 \end{列舉}
請注意,第一項的第二行按標籤的長度縮進\item
,因此它不完全是您想要的,但可能足夠接近。您也可以按照\ze
說明中提到的方式進行試驗,看看是否可以讓 Vim 識別標籤而不縮排後續行。我沒試過。
更新
:let
如果使用而不是設定“formatlistpat”,則它會更清晰一些,並且更容易編輯:set
。
:let &l:flp = '^\s*\\\(end\|item\)\>'
該l:
部分指定它是緩衝區本機設定。
更新
若要將縮排減少到 1 個字符,請執行以下操作:
:let &l:flp = '^\s*\\\ze\(end\|item\)\>'
請注意,如果 之前有任何空格\item
,則縮排量將變為該數字 + 1 \ze
。
答案2
這是適合我的解決方案。我編寫了一個外部腳本來處理乳膠文字的格式(https://github.com/elmanuelito/par-latex)
vim 中的使用範例:
- 選擇一些文字(例如
Vj
或ggVG
) - 輸入 ":!par-latex" (vim 命令列看起來像
'<,'>!par-latex
:) - 輸入回車
使用預設選項,如果您在 itemize 環境中選擇文本,它將處理您的範例。為了讓它在您選擇更多文字時起作用,您需要啟動format_inside_group
腳本開頭的選項。