Vim执行:e ++ ff = dos来自vimrc

时间:2016-11-24 11:52:19

标签: vim file-format

偶尔我必须使用Vim中的混合Unix / DOS文件。该文件将在大多数行的末尾显示^M。我无法将整个文件转换为Unix格式。

修正为:e ++ff=dos

我试图在我的vimrc中加入至少作为shorcut(如果不是autocmd),但没有成功。

ga的{​​p> ^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个字符?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在DOS文件格式中打开缓冲区不会文件转换为UNIX格式。只要您希望将缓冲区编辑为DOS,并将其写为DOS,它就足够了。隐藏^ M也没有转换 - 你的问题给了我你认为它的印象。

如果您想转换为仅限LF-line-endings,

  1. 删除所有^ M个字符::%s/<C-V><cr>//ge<cr>。您可以将其合并到函数或自动命令中。
  2. 将缓冲区标记为仅使用LF行结尾::setlocal ff=unix

答案 1 :(得分:0)

如果执行:e +ff=dos,则将文件转换为DOS格式;即写完后,所有行结尾将转换为CR-LF。你已经提到你不能将整个文件转换为Unix格式,但如果转换为DOS是可以的,那么这就是解决方案。

对于您的函数,您不需要通过:normal,因为:e命令是Ex命令,并且可以直接在函数中使用。对于:normal这样的普通模式命令,您只需要dd。因此,您可以重写:

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实例:

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