如果已经不是unix,我如何设置vim自动将我打开的任何文本文件的行结尾转换为unix?

时间:2011-03-18 20:10:16

标签: vim

我正在寻找某种插件/ vi代码来检测任何文件中是否有^M(回车?)或任何类型的指示,表明行结尾不是unix,如果所以要么删除它们,要么在文件上运行dos2unix

我需要在文件打开之前/期间自动工作。

此外,对于那些打算建议手动转换行结尾的人,一个答案指出做:set ff=unix,但我认为这不会杀死unix文件中的^M

使用:%s/^M//g并不是一个技巧,因为使用文字^不匹配char?

3 个答案:

答案 0 :(得分:3)

以下功能很有趣,因为 它将光标保持在原始位置 把它放在你的。的vimrc

" dos2unix ^M
fun! Dos2unixFunction()
    let _s=@/
    let l = line(".")
    let c = col(".")
    try
        set ff=unix
        w!
        "%s/\%x0d$//e
    catch /E32:/
        echo "Sorry, the file is not saved."
    endtry
    let @/=_s
    call cursor(l, c)
endfun
com! Dos2Unix keepjumps call Dos2unixFunction()
au BufReadPost * keepjumps call Dos2unixFunction()

答案 1 :(得分:1)

因为你标记了这个git - 你可以自动在checkin / out上使用git转换行结束(http://www.kernel.org/pub/software/scm/git/docs/git-config.html)< / p>

PS。在替换中执行^ M的技巧是

:%s/{Ctrl+V}{Ctrl+M}//{Enter}

答案 2 :(得分:0)

如果你想在你打开的任何文件中替换任何^ M,你vimrc中的以下autocmd可以提供帮助:

au BufReadPost * %s/^M//g

按照上一个答案中的说明插入^ M.