Существует несколько плагинов Tex для vim ( vim-latex , AutomaticLatexPlugin, скажем, пара).
Каковы различия в предоставляемых функциональных возможностях этих (названных мной и, возможно, других) плагинов TeX?
Вот пара связанных вопросов по SO:
Существует несколько плагинов Tex для vim ( vim-latex , AutomaticLatexPlugin, скажем, пара).
Каковы различия в предоставляемых функциональных возможностях этих (названных мной и, возможно, других) плагинов TeX?
Вот пара связанных вопросов по SO:
Ответы:
Я не буду давать подробное сравнение, поскольку у меня ограниченный опыт работы с различными плагинами. Я хорошо знаю пару плагинов ( LaTeX-Box и LaTeX-Suite ), и я очень хорошо знаю один плагин, так как сам его разрабатываю: vimtex . Таким образом, я буду в основном писать о vimtex. Однако сначала я укажу некоторые ссылки, которые могут представлять интерес для других.
Есть много плагинов для Vim. Вот те, которые я признал как минимум наполовину популярными:
На tex.stackexchange.com есть огромный список редакторов и интегрированных сред LaTeX. В целом он дает хороший обзор, но также предоставляет некоторые обзоры плагинов для Vim:
vimtex основан на LaTeX-Box. Это началось после того, как я в течение некоторого времени вносил исправления ошибок и обновления в LaTeX-Box. Я понял, что плагин может быть написан гораздо более современным способом, если я написал его с нуля. Сначала я лишил большинство функций и построил более надежный и модульный «двигатель». Затем я добавил функции, и я думаю, что сегодня у него есть большинство функций LaTeX-Box, а затем и некоторые.
Вместо того, чтобы давать полный список возможностей (см. Здесь ), я скорее попытаюсь указать на некоторые различия между vimtex и другими плагинами. Тем не менее, я хочу представить несколько смелых заявлений:
Поскольку vimtex основан на LaTeX-Box, он, очевидно, имеет аналогичные принципы. Идея состоит в том, чтобы сделать вещи простыми и решать проблемы, которые еще не решены другими, лучшими плагинами. Он использует latexmk для компиляции документов LaTeX и использует внутренний плагин Vim для подсветки синтаксиса.
В настоящее время в vimtex отсутствует одна важная функция LaTeX-Box: одиночная компиляция с обратным вызовом . Причина, по которой эта функция отсутствует в vimtex, заключается просто в том, что она сложная, и я никогда не находил способ реализовать ее, достаточно простой для моих собственных предпочтений (предложения приветствуются, пожалуйста, не стесняйтесь открывать вопросы или запрашивать запросы) ).
Основное различие между vimtex и LaTeX-Suite, вероятно, заключается в том, что vimtex не пытается реализовать полноценную IDE для LaTeX внутри Vim. Например:
latexmk
для компиляции с функцией обратного вызова , чтобы получить мгновенную обратную связь об ошибках компиляцииЯ не могу сделать сравнение, так как Vim-LaTeX - единственный плагин LaTeX, который я использовал. Я использую Vim-LaTeX почти год. Так что я буду говорить только о Vim-LaTeX.
В Vim-LaTeX есть много функций. Я не помню их всех. Я просто расскажу о функциях, которые я знаю и постоянно использую.
Примечание. Это мой ограниченный пользовательский опыт , который может вводить в заблуждение . Я не опытный пользователь Vim. И я ничего не знаю о vimscript.
<C-j>
JumppingIMAP()
Функция и функции <C-j>
jumpping предоставляются отдельно как плагин imaps.vim
в комплекте Vim-LaTeX. Они являются мощными функциями и могут быть очень полезны, даже если вы не пишете LaTeX.
IMAP()
функция обеспечивает более естественный способ сделать вставки отображения режима и шаблонами в целом , чем встроенный imap
и iabbrev
ИМО.
<C-j>
джампинг используется многими функциями завершения Vim-LaTeX. Точка скачка обозначена <++>
.
Встроенные сопоставления клавиш в режиме вставки реализованы в виде IMAP()
вызовов. Например, вы можете найти длинный список полезных IMAP()
вызовов в main.vim
файле:
call IMAP ('__', '_{<++>}<++>', "tex")
call IMAP ('()', '(<++>)<++>', "tex")
call IMAP ('[]', '[<++>]<++>', "tex")
call IMAP ('{}', '{<++>}<++>', "tex")
...
call IMAP ('((', '\left( <++> \right)<++>', "tex")
call IMAP ('[[', '\left[ <++> \right]<++>', "tex")
call IMAP ('{{', '\left\{ <++> \right\}<++>', "tex")
...
Затем, когда вы наберете say ()
, курсор будет находиться в круглых скобках, заменяя первый <++>
. После того, как вы закончили печатать внутри, вы пинаете <C-j>
и ударяете, курсор переместится из круглых скобок, и вы просто продолжаете печатать вперед. Как только вы привыкли к нему, он начинает формировать поток ввода, который вызывает привыкание ...
Вы видите сверху, \left
\right
пара может быть напечатана легко с двойным штрихом ее открывающей скобки. И <C-j>
прыжки делают поток ввода.
Одна из основного глюка IMAP()
и <C-j>
дела в том , что они путают свою последнюю историю изменений . (Одна ошибка, которую я хочу исправить в течение длительного времени.) Поэтому вы можете столкнуться с неожиданным поведением при попытке повторить ваше последнее изменение, .
если ваше «предполагаемое последнее изменение» содержит эти вызовы функций.
Вы можете использовать все виды сопоставлений IMAP()
, от простых сопоставлений клавиш до более сложных шаблонов. Вот несколько примеров моих отображений ( ftplugin/tex.vim
):
call IMAP('*EEQ',"\\begin{equation*}\<CR><++>\<CR>\\end{equation*}<++>",'tex')
call IMAP('DEF',"\\begin{definition}[<++>]\<CR><++>\<CR>\\end{definition}<++>",'tex')
call IMAP('BIC','\binom{<++>}{<++>}<++>','tex')
call IMAP('PVERB','\PVerb{<++>}<++>','tex')
call IMAP('VERB','\verb|<++>|<++>','tex')
Интересным фактом о imaps.vim
плагине является то, что это глобальный плагин, который подразумевает его потенциальное использование вне LaTeX. Действительно, я использую <++>
и <C-j>
jumppings (в сочетании с другими плагинами) для создания шаблонов фрагментов кода в C.
<F5> <F7>
Вставка команд и окруженияОдним из недостатков IMAP()
является то, что комбинация клавиш больше не может использоваться в обычном тексте (если только вы не отмените отображение u
). В тех случаях, когда вы просто хотите вызвать сопоставление, как вы хотите, <F5>
и <F7>
пригодится. Эти две клавиши используются для запуска сред и вставки встроенных команд соответственно. И они ведут себя по-разному в зависимости от режима и настроек пользователя.
В режиме вставки / обычном режиме, когда курсор присоединяет слово или находится в слове, <F5>
по умолчанию нажатие вставит базовое окружение формы
\begin{word}
<Cursor>
\end{word}<++>
на основании слова; при нажатии <F7>
по умолчанию будет вставлена основная встроенная команда формы, \word{}<++>
основанная на слове.
«По умолчанию» я имею в виду, что вы можете настроить поведение определенного слова при запуске с помощью <F5>
/ <F7>
. Вот некоторые из моих настроек ( .vimrc
):
let g:Tex_Com_newcommand = "\\newcommand{<++>}[<++>]{<++>}<++>"
let g:Tex_Com_latex = "{\\LaTeX}<++>"
let g:Tex_Com_D = "\\D{<++>}{<++>}<++>"
В Insert / Normal Mode, когда курсор не прикреплен ни к чему (он же в одиночку ), нажатие <F5>
/ <F7>
подскажет вам меню для выбора среды / команду для вставки. Или вы можете ввести название желаемой среды / команды внизу. Лично я редко использую <F5>
/ <F7>
таким способом.
Нажмите <F5>
/ <F7>
после визуального выбора фрагмента текста, появится меню для переноса текста . Затем выделенный текст будет перенесен в среду / команду, которую вы выбрали или набрали.
В режиме вставки / обычного режима, когда курсор находится в области действия окружения / команды, нажатие <Shift>+<F5>/<F7>
предложит меню для изменения окружения / команды .
`a
в `z
и соответствующие столицы.`8
для \infty
, `<
для \le
, `I
для \int_{<++>}^{<++>}<++>
и т. Д."
Двойное нажатие возвращает пару двойных кавычек TeX. Таким образом, чтобы ввести буквенный "
символ, вы должны использовать.\item
тег.\left
\right
пары `(
, `[
и `{
.Tex_FoldedSections
, Tex_FoldedMisc
, и Tex_FoldedEnvironments
.Иногда встроенные сопоставления зашли слишком далеко или не соответствуют желаемому. Вы можете переопределить встроенные отображения, переопределив их в after/ftplugin/tex.vim
:
call IMAP('`|','\abs{<++>}<++>','tex')
call IMAP('ETE',"\\begin{table}\<CR>\\centering\<CR>\\caption{<+Caption text+>}\<CR>\\label{tab:<+label+>}\<CR>\\begin{tabular}{<+dimensions+>}\<CR><++>\<CR>\\end{tabular}\<CR>\\end{table}<++>",'tex')
call IMAP('==','==','tex')
call IMAP('`\','`\','tex')
Мне всегда нужно переключаться между pdflatex
и xelatex
двигателем. Таким образом, у меня есть следующие строки в моем .vimrc
:
"switch to pdflatex
function SetpdfLaTeX()
let g:Tex_CompileRule_pdf = 'pdflatex --interaction=nonstopmode -synctex=1 -src-specials $*'
endfunction
noremap <Leader>lp :<C-U>call SetpdfLaTeX()<CR>
"switch to xelatex
function SetXeLaTeX()
let g:Tex_CompileRule_pdf = 'xelatex --interaction=nonstopmode -synctex=1 -src-specials $*'
endfunction
noremap <Leader>lx :<C-U>call SetXeLaTeX()<CR>
Это грязная и сложная тема. С определенным средством просмотра PDF и определенным количеством удачи это может быть очень легко. Но это в основном вопрос поиска в Google.
В целом, я думаю, что это будет хорошо работать, если вы готовы потратить некоторое время, чтобы приручить зверя. Тем не менее, если бы у меня было время и достаточные знания, я, несомненно, уменьшу накладные расходы и изучу возможности интеграции с другими плагинами.
vimtex
можно работать бок о бокLatex-Suite
, а это значит, что вы можете получить лучшее из двух плагинов одновременно . :)