2017-01-23 87 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不在乎,整個事情是非常瞬間的。

注意:「視圖」部分用於保持光標到位。

+0

'\ ^我' - >'\^\我' –

+0

@SatoKatsura,我不明白你在說什麼。 – romainl

+0

在TeX中''應該寫成'\^\ i',而不是'\^i'。後者有一個額外的點。 –

0

你可以鏈條中的人到一個命令中使用|(這裏由\,因爲它是地圖定義的一部分逃了出來,而不是「定義地圖,然後運行這個換人」):

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

我也要在末尾添加<Ctrl-v><enter以避免必須按Enter鍵才能運行替換。還有一個e標誌來禁止No match錯誤,它會破壞以下命令。