Існує ряд плагінів 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 та IDE. Він дає хороший огляд загалом, але також надає деякий огляд плагінів для Vim:
vimtex заснований на LaTeX-Box. Це почалося після того, як я деякий час додавав виправлення помилок та оновлення до LaTeX-Box. Я зрозумів, що плагін можна написати набагато сучаснішим чином, якби я написав його з нуля. Я спершу позбувся більшості функцій і побудував більш надійний і модульний "двигун". Потім я додав функції, і, думаю, сьогодні він має більшість функцій LaTeX-Box, а потім і деякі.
Замість того, щоб наводити повний список функцій (див. Натомість тут для цього ), я скоріше спробую вказати на деякі відмінності між vimtex та іншими плагінами. Однак я хочу надати кілька сміливих тверджень:
Оскільки vimtex заснований на LaTeX-Box, він, очевидно, має схожі принципи. Ідея полягає в тому, щоб зробити прості речі і вирішити проблеми, які не вирішуються іншими, кращими плагінами. Він використовує latexmk для складання документів LaTeX, і він спирається на внутрішній плагін Vim для виділення синтаксису.
Наразі в LaTeX-Box є одна важлива особливість, якої немає у vimtex: Компіляція з одним знімком із зворотним дзвінком . Причина, що ця функція не в vimtex, полягає лише в тому, що вона є складною, і що я ніколи не знайшов спосіб її впровадження, який є досить простим для моїх власних уподобань (пропозиції вітаються. Будь ласка, не соромтеся відкривати проблеми або тягнути запити ).
Основна відмінність vimtex від LaTeX-Suite, ймовірно, полягає в тому, що vimtex не намагається реалізувати повноцінний IDE для LaTeX всередині Vim. Наприклад:
latexmk
для компіляції з функцією зворотного виклику, щоб отримати миттєвий зворотній зв’язок про помилки компіляціїЯ не можу порівняти, оскільки Vim-LaTeX - єдиний плагін LaTeX, який я використовував. Я використовую Vim-LaTeX майже рік. Тому я поговорю лише про Vim-LaTeX.
У Vim-LaTeX є багато функцій. Я не пам’ятаю їх усіх. Я просто поговорю про функції, які я знаю і використовую постійно.
Примітка. Це мій обмежений досвід користувачів , який може бути дуже оманливим . Я не досвідчений користувач Vim. І я нічого не знаю про vimscript.
<C-j>
стрибкиIMAP()
функції та функції <C-j>
стрибків надаються окремо як плагін imaps.vim
у пакеті Vim-LaTeX. Вони є потужними функціями і можуть бути дуже корисними навіть тоді, коли ви не пишете LaTeX.
IMAP()
Функція забезпечує більш природний спосіб зробити відображення режимів відображення та шаблонів взагалі, ніж вбудований imap
та iabbrev
, IMO.
<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")
...
Потім, коли ви вводите скажімо ()
, курсор автоматично розміщуватиметься в дужках, замінюючи перший <++>
. Після того, як ви закінчите вводити всередину, ви натискаєте <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>
стрибки (поєднуючись з іншими плагінами) для створення шаблонів фрагментів коду в 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
, а це означає, що ви можете отримати найкраще з двох плагінів одночасно . :)