2016-11-24 130 views
0

偶爾我需要在Vim中使用混合的Unix/DOS文件。該文件將在大多數行上顯示^M。我無法將整個文件轉換爲Unix格式。Vim執行:e ++ ff = dos從vimrc

修復因爲這是:e ++ff=dos

我試圖合併,在我的vimrc至少爲shorcut(如果沒有自動命令),但沒有成功。

ga^M將顯示:

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

這不會的vimrc工作:

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沒問題,那麼這就是解決方案。

對於您的功能,您不需要經過:normal,因爲:e命令是Ex命令,可以直接在函數中使用這些命令。對於像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 

事實上,我會定義:

:command! FixDos edit ++ff=dos 

如果不能隱蔽整個文件,你就必須忍受的^M;最好你可以做的就是試圖隱藏它們,就像你試圖隱藏它一樣。這種變異可能趕上的^M情況下通過其他還有語法組內appying:

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

在DOS中打開一個緩衝區fileformat不是轉換成UNIX格式的文件。如果您希望將緩衝區編輯爲DOS,並且將其作爲DOS編寫,那也是足夠的。隱藏^ M也不會轉換 - 您的問題給我留下了您認爲它的印象。

如果你想轉換爲LF-行結束止,

  1. 刪除所有^ M字符::%s/<C-V><cr>//ge<cr>。您可以將它併入函數或自動命令中。
  2. 馬克緩衝區只使用LF行結束::setlocal ff=unix
+0

我喜歡DOS轉換爲UNIX有兩個清晰的步驟:(1)':電子++ FF = DOS '和那麼(2)':w ++ ff = unix' – Ves