2016-11-24 3 views
0

時々、VimでUnix/DOSファイルを混在させて作業する必要があります。そのファイルはほとんどの行の最後に^Mと表示されます。ファイル全体をUnix形式に変換することはできません。そのためVim実行:vimrcからe ++ ff = dos

修正は、私は成功せず(autocmdされていない場合)は、少なくともshorcutとしての私のvimrcでそれを組み込むことを試みた:e ++ff=dos

です。

<^M> 13, Hex 0d, Octal 15 

これはのvimrcから動作しません:^Mため

gaが表示されます、私は隠す機能で何かを試してみました

function! Fix_dos() 
    execute "normal :e ++ff=dos<cr>" 
endfunction 

、それはすべての^M文字を隠すことはありません。

:set conceallevel=2 
:syntax match Todo /\r/ conceal 

また、ファイルに^M文字が表示されるかどうかを検出する方法はありますか?

ありがとうございました。

答えて

0

あなたが:e +ff=dosを行う場合は、DOS形式にファイルを変換します。つまり、書き込み後にすべて行末がCR-LFに変換されます。あなたはをUnixフォーマットに全ファイルに変換できないと述べましたが、DOSへの変換が問題ない場合、これが解決策です。

:eコマンドはExコマンドであり、関数内で直接使用することができるため、関数としては:normalを実行する必要はありません。 ddのようなノーマルモードコマンドの場合は、:normalが必要です。そのため、あなたは書き換えることができます:

function! Fix_dos() 
    " This would be the correct syntax, but no need for :normal: 
    "execute "normal :e ++ff=dos\<cr>" 
    " Also, no need for execute: 
    "execute "e ++ff=dos" 
    edit ++ff=dos 
endfunction 

実際には、私が定義します:あなたはファイル全体をひそかできない場合は、^Mと一緒に暮らす必要があります

:command! FixDos edit ++ff=dos 

。あなたが隠すことを試みたように、あなたができることは、それらを隠そうとすることです。(1) `::私は2つの明確な段階でUNIXにDOSを変換することを好む

:syntax match Todo /\r/ conceal containedin=ALL 
0

DOSファイル形式でバッファを開くと、はファイルをUNIX形式に変換します。バッファーをDOSとして編集し、それをDOSとして書きたい場合は、それだけで十分です。^Mも隠していても変換されません - あなたの質問は、あなたが思うような印象を与えてくれます。

あなたはLF-行末のみに変換したい場合は

  1. は、すべての^ M文字を削除します:%s/<C-V><cr>//ge<cr>。それを関数またはオートコマンドに組み込むことができます。
  2. マークのみLF改行コードを使用するためのバッファ::setlocal ff=unix
+0

:この亜種は、他の構文グループ内appyingによって^Mよりインスタンスをキャッチする可能性がある' E ++ FF =ドスと次に(2) ':w ++ ff = unix' – Ves

関連する問題