Выделение синтаксиса Vim с помощью $и lstlisting lstinline
Если я использую встроенную версию lstlisting, как показано:
\lstinline{!$omp parallel for}
подсветка синтаксиса в vim идет не так, а остальная часть латексного файла окрашена в красный цвет, как если бы она была частью списка кодов. Это вызывает проблему доллар $
. Как я могу избежать этого?
Ответы
Ответ 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. Я добавил этот ответ просто как "прямую ссылку".