Vim表达式(和语言)敏感缩进 - 可能吗?

时间:2011-12-17 16:11:27

标签: vim indentation

好吧,我正在编辑一个LaTeX文件,但我对默认的vim缩进不满意。

假设我想让vim做这样的缩进:

\begin{document}
    \maketitle
    \section{A}
    \begin{itemize}
        \item 1
    \end{itemize}
    \section{B}
    \begin{itemize}
        \item 1
    \end{itemize}
    \section{C}
    \begin{itemize}
        \item 1
        \item 2
        \item 3
    \end{itemize}
\end{document}

基于此代码,我基本上需要的是,当它找到\ _开始{}时缩进4个空格,并在找到\ end {}时在-4个空格中缩进。

我可以个性化吗?

我读到了“indentexpr”,这可能会产生我的期望,但我无法找到任何示例或指导方针来开始。

对我来说,了解如何做到这一点非常重要,而不是获得解决方案。我需要指导来实现它,因为我可能也希望在其他语言中进行类似的“调整”。

2 个答案:

答案 0 :(得分:4)

kev tex.vim 文件中,要适应的重要部分是下一行:

1.-这些说没有包含这些字符串的缩进行。

if !exists("g:tex_noindent_env")
    let g:tex_noindent_env = 'document\|verbatim'
endif

2.-完成此'if'条件的行是缩进的。

if line =~ '\\begin{.*}' && line !~ g:tex_noindent_env
    ...
endif

3.-完成此'if'条件的行是不缩进的。

if cline =~ '^\s*\\end' && cline !~ g:tex_noindent_env
    ...
endif

您有两个选项,评论部分&& line !~ g:tex_noindent_env或从document删除g:tex_noindent_env

选项1(放在&&&&&&&&&&& amp;>

)之前
if line =~ '\\begin{.*}' "&& line !~ g:tex_noindent_env

if cline =~ '^\s*\\end' "&& cline !~ g:tex_noindent_env

选项2(删除'文档')

let g:tex_noindent_env = 'verbatim'

打开文件后执行gg=G。它应该工作。

有关缩进表达式的详细信息,请查看syntax vim文件夹。通过:echo $VIMRUNTIME

中的Vim获取

答案 1 :(得分:1)

indent文件中最重要的代码行是:

setlocal indentexpr=YourIndentFunc()

YourIndentFunc()内,有一个上下文变量lnum,用于跟踪当前行号。
YourIndentFunc()计算当前行开头应插入多少个空格。

tex.vim : Indent file for TeX