Отступы, чувствительные к выражению Vim (и языку) - возможно? - PullRequest
2 голосов
/ 17 декабря 2011

Хорошо, я редактирую файл LaTeX, но меня не устраивает стандартный отступ vim.

Допустим, я хотел, чтобы vim do indentate был таким:

\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 пробела, когда он нашел \ begin {}, и отступ в -4 пробела, когда он нашел \ end {}.

Могу ли я персонализировать его?

Я читал об «indentexpr», который, вероятно, дал бы то, что я ожидал, но я не смог найти никаких примеров или рекомендаций, с чего начать.

Мне важно узнать, КАК это сделать, а не получить решение. Мне нужны руководящие принципы, чтобы добиться этого, потому что, вероятно, я захочу сделать аналогичные «настройки» и на других языках.

Ответы [ 2 ]

4 голосов
/ 17 декабря 2011

В tex.vim файле kev важными частями для адаптации являются следующие строки:

1.- В них нет строк отступа, содержащих теstrings.

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 (поставить) непосредственно перед &&) :

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 голос
/ 17 декабря 2011

Самая важная строка кода в файле indent:

setlocal indentexpr=YourIndentFunc()

В YourIndentFunc() есть контекстная переменная lnum, которая отслеживает текущий номер строки. YourIndentFunc() вычисляет, сколько пробелов нужно вставить в начале текущей строки.

tex.vim: файл отступа для TeX

...