2017-01-23 15 views
0

私は現在、vimを使用してlatexでかなり長いドキュメントを作成しています。すべてのアクセント付き文字をラテックスのアクセント付き文字で置き換える必要があります。私は、ファイルに直接アクセントを使用することを可能にするパッケージを使用することはできません/したくない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

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

+0

@里桂さん、あなたが言っていることは分かりません。 – romainl

+0

TeX 'îは' \^i 'ではなく '\^\ i'と書かれているはずです。後者には余分なドットがあります。 –

0

あなたは可能性がチェーン|を使用して、単一のコマンドにこれらの(それがマップ定義の一部だとして、ここで\でエスケープ、「この置換を実行して、マップを定義する」ではない):

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

私は考えもEnterを押して置換を実行する必要がないように、末尾に<Ctrl-v><enterを追加します。またeフラグはNo matchのエラーを鎮圧し、次のコマンドを壊すことになります。

私は何年も私のセットアップでこの機能を持っていた
関連する問題