vim "gq}" 指令重新換行段落,以及 LaTeX

vim "gq}" 指令重新換行段落,以及 LaTeX

我怎麼能讓這個指令不換行之類的東西\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 中的使用範例:

  • 選擇一些文字(例如 VjggVG
  • 輸入 ":!par-latex" (vim 命令列看起來像'<,'>!par-latex:)
  • 輸入回車

使用預設選項,如果您在 itemize 環境中選擇文本,它將處理您的範例。為了讓它在您選擇更多文字時起作用,您需要啟動format_inside_group腳本開頭的選項。

相關內容