이 명령이 다음과 같은 항목을 래핑하지 않도록 하려면 어떻게 해야 합니까 \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}
토큰이 \item
단락의 끝을 의미한다는 것을 어떻게든 vim이 인식하게 할 수 있다면 그것이 올바르게 작동할 것이라고 생각합니다. 그런데 그렇게 하려면 어떻게 해야 할까요?
답변1
단락 구분 태그를 포함하도록 'formatlistpat' 옵션을 설정하면 이 작업을 수행할 수 있다고 생각합니다. 작동하려면 'formatoptions'에 'n'을 포함해야 합니다. 보다
:help 'formatlistpat'
:help 'formatoptions'
예를 들어,
:set formatlistpat=^\\s*\\\\\\(end\\\\|item\\)\\>
:set formatoptions+=n
:set textwidth=40
예제의 형식을 지정하면 다음이 생성됩니다.
\begin{열거하다} \item 이것은 긴 단락일 수 있습니다 여러 줄에 걸쳐 있는 \item 어쩌구 \end{열거하다}
첫 번째 항목의 두 번째 줄은 태그 길이만큼 들여쓰기되어 있으므로 \item
정확히 원하는 내용은 아니지만 충분히 가까울 수 있습니다. \ze
Vim이 다음 줄을 들여쓰기하지 않고도 태그를 인식할 수 있는지 알아보기 위해 도움말에 언급된 대로 실험해 볼 수도 있습니다 . 나는 그것을 시도하지 않았습니다.
업데이트
:let
대신에 'formatlistpat'을 사용하여 설정하면 'formatlistpat'가 좀 더 명확하고 편집하기 쉽습니다 :set
.
:let &l:flp = '^\s*\\\(end\|항목\)\>'
이 l:
부분은 버퍼 로컬 설정임을 지정합니다.
업데이트
들여쓰기를 1자로 줄이려면 다음을 수행하십시오.
:let &l:flp = '^\s*\\\ze\(end\|항목\)\>'
앞에 공백이 있으면 \item
들여쓰기는 해당 숫자 + 1이 됩니다. 를 사용하여 들여쓰기를 0으로 줄이는 것이 가능한지 모르겠습니다 \ze
.
답변2
나에게 맞는 솔루션은 다음과 같습니다. 저는 라텍스 텍스트의 서식을 처리하기 위해 외부 스크립트를 작성했습니다(https://github.com/elmanuelito/par-latex)
vim에서의 사용 예:
- 텍스트를 선택하세요(예:
Vj
또는ggVG
). - ":!par-latex"를 입력하세요(vim 명령줄은 다음과 같습니다:
'<,'>!par-latex
) - Enter를 입력하세요
기본 옵션을 사용하면 itemize 환경 내에서 텍스트를 선택하면 예제가 처리됩니다. 더 많은 텍스트를 선택할 때 작동하려면 format_inside_group
스크립트 시작 부분에서 옵션을 활성화해야 합니다.