11 окт. 2010 г.

Про Vim и LaTeX
.

Весь вечер сегодня и всю ночь разбирался я в LaTeX'е и настраивал под него Vim. Я пользуюсь замечательным плагином Latex-Suite, но в нём столько всего - прям ваще дофига, так что я долго ещё буду в нём копаться..
Мне захотелось написать о паре крутых настроек прямо сейчас (в 5 ночи/утра), потому что потом как известно не найдётся на это времени.
  • Про языковые раскладки и математический режим Теха

    Я пользуюсь внутренним переключением раскладок в Vim'е:
    set keymap=russian-jcuken
    set iminsert=0
    set imdisable

    Поскольку стандартным сочетанием Ctrl-^ пользоваться неудобно, я замапил его на бесполезную кнопку § (на моём маке она рядом с 1, а та, которая там расположена на обычных клавах - с ~ и ` - между Shift и z).
    noremap §
    lnoremap §

    inoremap §


    На этой же кнопке есть не менее бесполезный символ ±, на который я повесил следующее сочетание:
    inoremap ± $
    lnoremap ± $

    и поместил его в ftplugin/tex.vim чтобы оно работало только в теховских файлах. Это очень удобно: пишешь основной текст на русском, нажимаешь ± и при этом в техе символом $ открывается математический режим и переключается раскладка на английскую, вводишь формулы, снова нажимаешь заветную клавишу и вуаля - режим формул закрыт, а раскладка снова русская, можно дальше набирать текст.

  • Про аббревиатуры и макросы

    В плагине Latex-Suite есть множество макросов для быстрого набора различных теховских конструкций. Их можно посмотреть вот тут.
    Мне очень нравятся макросы, начинающиеся на `. Они короткие и понятные. Например, ` + 'латинская буква' заменяется на "соответствующую" греческую: `a -> \aplha, `t -> \theta и т.д. А сочетание `/ - вставляет команду для дроби: \frac{<++>}{<++>}<++> - при этом в ней есть места для подстановки (<++>) при нажатии Ctrl-j курсор перескакивает к следующему такому месту и там сразу можно писать то, что нужно.

    В общем, таких макросов много, они удобны, но разумеется, хочется написать свои, чтобы ускорить набор, например, собственных команд или окружений. поначалу, я пользовался встроенным вимовским iabbrev, но он как-то кривовато работает и довольно неудобен. Так что стоит воспользоваться, опять же, мощью Latex-Suite и в ftplugin/tex.vim прописать конструкцию следующего вида:
    call IMAP('>=', ' \geq ', 'tex')
    call IMAP('<=', ' \leq ', 'tex')
    - в первом аргументе IMAP то, что надо заменять, во втором - на что заменять. Всё очень просто. Так же можно это сделать для окружений. Но для того, чтобы пользоваться спецсимволами типа (перевод строки), нужно их экранировать и брать второй аргумент в двойные кавычки:
    call IMAP('def ', "\\begin{definition}\<++>\\\end{definition}", 'tex')
    call IMAP('опр ', "\\begin{definition}\<++>\\\end{definition}", 'tex')

  • Построчная синхронизация исходника с результатом

    Это, пожалуй, самая крутая функция, которую я сегодня настроил. Для этого я установил pdf-viewer Skim (mac only), и произвёл следующие манипуляции:
    1. в настройках Skim на вкладке Синхро сделал следующие настройки:

    2. а в ftplugin/tex.vim прописал:
    let g:Tex_DefaultTargetFormat='pdf'
    let g:Tex_CompileRule_pdf='/usr/texbin/pdflatex -synctex=1 -file-line-error -interaction=nonstopmode $*'
    let g:Tex_ViewRule_pdf = 'Skim'

    во второй опции главное - это -synctex=1. Об этом я прочитал вот тут, но к сожалению попал я туда не сразу и пришлось долго искать альтернативы типа pdfsync.. А тут перечислены альтернативные вьюеры, если этот почему-то не подходит.

    В результате этих несложных манипуляций получилась следующая картина:

    когда я редактирую теховский исходник в Vim'е, я нажимаю \ll чтобы скомпилировать его и \ls, чтобы перейти к соответствующему месту в pdf с результатом. Наоборот, когда я просматриваю результат и, положим, нахожу ошибку, я нажимаю Cmd-Shift, щёлкаю мышкой по ошибке и попадаю в Vim'е на соответствующую строчку с кодом!

  • Spell-check

    ну и напоследок, я немного разобрался с проверкой орфографии в Vim'е. не могу сказать, чтобы очень хорошо разобрался и поэтому пользоваться пока не очень удобно, но как и каждый раз, удивлён тем, что в Vim'е таки есть эта функция и она вполне себе нормально работает! вот вкратце, как ей пользоваться:
    1. вкл. ':set spell' / выкл. ':set nospell'.
    2. установить язык проверки ':set spelllang=ru_yo' (русский язык с буквой ё).
    3. перейти к следующей/предыдущей ошибке: ']s' и '[s' соответственно.
    4. добавить в словарь: 'zg'.
    5. предложить варианты исправления: 'z='.
P.S.
Хочу отдельно отметить, что когда я набрал ':set spelllang=ru', MacVim сказал мне что для такого языка словаря нет и спросил разрешения скачать. Я был шокирован и разрешил - он просто скачал нужные файлы и всё - в прежние времена он в лучшем случае отправил бы меня самого всё искать и качать, а то бы и просто ругнулся, что не знает такого языка. А теперь-то - всё для людей!

Комментариев нет:

Отправить комментарий