Подтвердить что ты не робот

Выделение синтаксиса Vim с помощью $и lstlisting lstinline

Если я использую встроенную версию lstlisting, как показано:

\lstinline{!$omp parallel for}

подсветка синтаксиса в vim идет не так, а остальная часть латексного файла окрашена в красный цвет, как если бы она была частью списка кодов. Это вызывает проблему доллар $. Как я могу избежать этого?

4b9b3361

Ответ 1

Позвольте окончательно решить эту проблему раз и навсегда!

Я отправил письмо Чарльзу Э. Кэмпбеллу (Charles E. Campbell), сопровождающему tex.vim, предлагая добавить правила подсветки для пакета листингов. Однако оказывается, что отсутствие поддержки пакета листингов в tex.vim фактически является преднамеренным. Обоснование можно найти :h tex-package. Короче говоря, вы должны создать свои собственные расширенные правила подсветки синтаксиса (см. Нижнюю часть сообщения):

Tex: хотите выделить больше команд?

LaTeX - программируемый язык, и поэтому есть тысячи пакетов специализированных команд LaTeX, синтаксиса и шрифтов. Если вы используете такой пакета, вы часто захотите, чтобы распределенный синтаксис /tex.vim поддерживал Это. Однако, очевидно, это непрактично. Поэтому, пожалуйста, подумайте об использовании методы в mysyntaxfile-add для расширения или изменения выделенного выделения по синтаксису /tex.vim. Пожалуйста, рассмотрите возможность загрузки любых расширений, которые вы пишете, который обычно будет идти в $HOME/after/syntax/tex/[pkgname].vim, чтобы http://vim.sf.net/.

Лично я считаю, что это немного неудачно, что он не будет включен, так как он, безусловно, увеличивает пороговое значение для обычного пользователя, чтобы написать его или ее LaTeX с помощью Vim. Поиск и добавление подсветки синтаксиса для lstlisting, lstinline и т.д. Не слишком просто. Не похоже, что в ближайшее время это изменится либо при просмотре этого потока.

DevSolar, похоже, уже нашел его (и я ценю кредит!), но Campbell предлагает пару примеров пакетов поддержки пакетов LaTeX. Первый, lstlisting.vba.gz, включает в себя правила выделения для lstlisting и lstinputlisting. Однако он не имеет lstinline, о котором идет речь.

Наконец, здесь мой listings.vim находился в $HOME/.vim/after/syntax/tex/

syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>"
syn region texZone  start="\\lstinputlisting" end="{\s*[a-zA-Z/.0-9_^]\+\s*}"
syn match texInputFile "\\lstinline\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt

-

Proper highlighting of verbatim, lstlisting and lstinline environments.

Это кажется предпочтительным решением. Он не требует изменения системных файлов в /usr/share/vim/.., вам не нужно загружать и размещать vimball или изменять среды, а не фиксировать выделение синтаксиса. Я мог бы изучить это как простой плагин, чтобы сделать его более доступным.

Наконец, не забудьте проверить, что вы фактически запускаете тип файла tex, а не plaintex, которому не хватает слишком много, чтобы быть жизнеспособным. Уже опубликовано это в комментарии выше, но еще немного информации можно найти в билет который я добавил в LaTeX-Box.

Ответ 2

Это действительно не ошибка - ее по дизайну. Чтобы подчеркнуть это правильно, Vim должен будет анализировать и интерпретировать весь документ TeX до момента, когда этот код возникает, поскольку TeX - это контекстно-зависимый язык. Это слишком сложно и слишком трудоемко для плагина подсветки синтаксиса.

Единственное приемлемое решение - переписать синтаксический маркер с нуля, используя полную реализацию TeX, которая испускает метаинформацию для каждого токена в исходном коде. Это огромный проект. Насколько я знаю, никакая в настоящее время реализация TeX не дает такую ​​информацию, а это значит, что действительно нужно было бы написать это.

Ответ 3

Это работает для меня:

\lstinline[mathescape]{!$\$$omp parallel for}

Насколько я понимаю, он набирает символ доллара в математическом режиме, но я не вижу никакой видимой разницы.

Ответ 4

Первоначальная проблема показалась мне, что остальная часть tex файла показана с перепутанной подсветкой синтаксиса. Поэтому, возможно, простым и практичным решением может быть использование

%stopzone

после lstlisting-Region.

Ответ 5

У меня была аналогичная проблема с вставкой R команд для knitr в tex файлах. В \rinline{} у меня было много $ и других специальных символов. И я исправил его так, чтобы Vim игнорировал текст внутри этой команды.

Вы хотите отредактировать файл tex.vim, в моем дистрибутиве sudo vim /usr/share/vim/vim73/syntax/tex.vim

Прибл. строка 228:

syn match texInputFile      "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"     contains=texStatement,texInputCurlies,texInputFileOpt

Изменить на:

syn match texInputFile      "\\\(epsfig\|input\|usepackage\|rinline\)\s*\(\[.*\]\)\={.\{-}}"        contains=texStatement,texInputCurlies,texInputFileOpt

... или для lstinline:

syn match texInputFile      "\\\(epsfig\|input\|usepackage\|lstinline\)\s*\(\[.*\]\)\={.\{-}}"      contains=texStatement,texInputCurlies,texInputFileOpt

Ответ 6

У меня нет этой проблемы. Я запускаю Vim 7.3.46 с filetype = tex. (Mine по умолчанию "plaintex" в .tex файлах, вы можете проверить тип файла с помощью: set ft?)

Ответ 7

Переходя по ссылке, отправленной timss на user1174052, я нашел Dr Chip Vim Страница, которая предоставляет lstlisting.vba.gz Плагин Vimball. Загрузите, откройте в Vim...

vim lstlisting.vba.gz

... выполнить vimball...

:so %

... и в следующий раз, когда вы откроете файл LaTeX, содержимое окружения lstlisting полностью игнорируется подсветкой синтаксиса.

Кредит отправляется пользователю timss, который разместил ссылку на билет LaTeX-Box, где он также разместил ссылку на страницу Dr Chip. Я добавил этот ответ просто как "прямую ссылку".