2017-01-23 4 views
0

В настоящее время я пишу довольно длинный документ с латексом, используя vim, и мне нужно заменить все акцентированные символы латексными акцентированными символами.vim - заменить все акценты

Пример

âttaché càsè => \^attach\'e c\`as\`e 

обратите внимание, что я не хочу/не могу использовать пакет позволяет использовать акценты непосредственно в файле.

Что я сделал до сих пор

моим текущим решения: Я сделал несколько отображений, чтобы заменить каждый акцент с правильной латексной композицией. Я применяю их в параграфах, используя визуальный режим.

vnoremap <leader>eaa :s/é/\\'e/g 
vnoremap <leader>eag :s/è/\\`e/g 
vnoremap <leader>eac :s/^/\\^e/g 
vnoremap <leader>aag :s/à/\\`a/g 
vnoremap <leader>iac :s/î/\\^i/g 
vnoremap <leader>oac :s/ô/\\^o/g 
etc. 

Что я ищу

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

Есть ли способ применить их все сразу?

Большое спасибо!

+0

Раньше была утилита, которая делала это преобразование взад и вперед, но я не могу вспомнить его имя. Возможно, вы должны спросить на [tex.se]. –

ответ

0

Я имел эту функцию в моих установках в течение многих лет:

function Entities() 
    let b:winview = winsaveview() 
    silent s/Á/\&Aacute;/ge 
    silent s/á/\&aacute;/ge 
    silent s/Â/\&Acirc;/ge 
    silent s/â/\&acirc;/ge 
    [... and 234 more lines like these ...] 
    if(exists('b:winview')) 
    call winrestview(b:winview) 
    endif 
endfunction 

Вы могли бы адаптировать его к вашим потребностям довольно легко:

function LatexAccents() 
    let b:winview = winsaveview() 
    silent s/è/\\`e/ge 
    silent s/ê/\\^e/ge 
    silent s/à/\\`a/ge 
    silent s/î/\\^i/ge 
    [... and so on ...] 
    if(exists('b:winview')) 
    call winrestview(b:winview) 
    endif 
endfunction 

Я должен добавить, что работает 238 замен на один строка или абзац звучит действительно глупо и расточительно, но Vim все равно, и все это в значительной степени мгновенно.

NB: часть «вид» должна содержать курсор на месте.

+0

'\^i' ->' \^\ i' –

+0

@SatoKatsura, я не понимаю, что вы говорите. – romainl

+0

В TeX ''' предполагается записать как' \^\ i', а не '\^i'. У последнего есть дополнительная точка. –

0

Вы можете приковать те в одну команду с помощью | (здесь замаскирована \, как это часть определения карты, а не «определить отображение затем запустить эту замену»):

vnoremap yourMapping :s/é/\\'e/g \| '<,'>s/è/\\`e/g " … other substitutions separated by \| 

Я хотел бы также добавьте <Ctrl-v><enter в конец, чтобы избежать нажатия клавиши ввода для запуска замещения. И флаг e, чтобы устранить ошибки No match, которые нарушили бы следующие команды.

Смежные вопросы