2016-11-24 136 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