Существует несколько плагинов 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, а это значит, что вы можете получить лучшее из двух плагинов одновременно . :)