Условная раскладка vim при открытии tex-файла

Я пытаюсь создать раскладку, которая будет вызывать latexmk, когда доступен .tex (было бы лучше, если бы .tex был в данный момент открытым и активным буфером)

Я старался :

:nnoremap <Leader>lw :if filereadable('*.tex')<cr>up!<cr>:!latexmk -pdf<cr>endif<cr>

при попытке запустить latexmk -pdf, но, к сожалению, он просто запрашивает эту строку в окне и ничего не делает:

~
:if filereadable('*.tex')
:  up!
:  :call Tex_RunLaTeX()
:  endif
Press ENTER or type command to continue

Пожалуйста, помогите.

(как уже говорилось, будет здорово, если это можно будет сделать, когда .tex является в настоящее время открытым и активным буфером.)

NB: этот вопрос и его вариант задавались здесь несколько раз, например, это и это , поэтому извините за повтор. Я не смог решить свою проблему с ними.


person BaRud    schedule 18.06.2013    source источник


Ответы (2)


Вам нужно сделать 3 вещи:

  • исправьте ваше сопоставление, чтобы правильно выполнить команду
  • создайте сопоставление, локальное для определенного буфера, используя параметр <buffer> для nnoremap.
  • загружать сопоставления только для определенного типа файла.

Сначала исправьте сопоставление, выполнив команду как одну команду ex, используя <bar> и удалив : и <cr>. Мы также удаляем часть, доступную для чтения, потому что мы только что записали файл.

nnoremap <buffer> :up!<bar>!latexmk -pdf<cr>

или вы можете использовать экспрессивное сопоставление, как предложил FDinoff.

Обратите внимание на параметр <buffer> в отображении. Это делает отображение доступным только для текущего буфера, а не для каждого буфера.

Теперь нам нужно убедиться, что это сопоставление работает только для tex типов файлов. Это можно сделать с помощью автокоманды в вашем .vimrc следующим образом:

autocmd FileType tex nnoremap <buffer> :up!<bar>!latexmk -pdf<cr>

Другой вариант — создать плагин типа файла. (подробнее см. :h ftplugin)

Простой пример: создайте файл с именем ~/.vim/ftplugin/text.vim и поместите в него сопоставления следующим образом:

nnoremap <buffer> :up!<bar>!latexmk -pdf<cr>

Лично я больше склоняюсь к подходу ftplugin, но иметь все в вашем файле .vimrc может быть неплохо.

person Peter Rincker    schedule 19.06.2013

Мне кажется, это можно сделать с помощью autocmd.

Autocmd загружает сопоставление только в том случае, если файл является tex-файлом.

autocmd FileType tex nnoremap <leader>lw :up! \| !latexmk -pdf<CR>

Если вы хотите сделать этот файл доступным для чтения ('*.tex'), который просто проверяет, является ли файл в каталоге tex-файлом. Вы можете использовать сопоставление expr из первой ссылки. В оставшейся части выражения мы просто помещаем пустую строку, поэтому сопоставление ничего не делает.

nnoremap <expr> <leader>lw filereadable('*.txt') ? ':up! \| !latexmk -pdf<CR>' : ''
person FDinoff    schedule 18.06.2013
comment
У меня нет особых предпочтений к nnoremap, поэтому решение autocmd достаточно хорошее. а что это \| отметка? Вы можете объяснить это? - person BaRud; 19.06.2013
comment
@Rudra, канал | — это разделитель команд в vim. Косая черта перед ним ускользает, она обрабатывается буквально, пока вы не запустите команду. Также в autocmd есть nnoremap. - person FDinoff; 19.06.2013