如果我打开在Windows中创建的文件,所有行都以^M结尾。如何一次删除这些字符?


当前回答

这比你要求的要多一点,但是:

nmap <C-d> :call range(line('w0'),line('w$'))->map({_,v-> getline(v)})->map({_,v->trim(v,join(map(range(1,0x1F)+[0xa0],{n->n->nr2char()}),''),2)})->map({k,v->setline(k+1,v)})<CR>

运行以下命令:set ff=unix|dos,不再需要unix2dos。

trim()的单参数形式具有与上面相同的默认掩码,加上0X20(实际空格),而不是0x1F该默认掩码清除所有非打印字符,包括难以找到的非中断空格[0xa0]从线条范围创建线条列表将该列表映射到trim函数,使用与源代码相同的掩码代码,减少空格再次将其映射到setline以替换行。all:setfileformat=do此时选择保存文件的eol,dos或unix如果您想删除或添加一些字符,那么应该很容易更改上面的字符范围

其他回答

使用以下命令:

:%s/^M$//g

要显示^M,请键入CtrlV,然后键入CtrlM。CtrlV告诉Vim按字面意思输入下一个字符。

要直接在Linux控制台中运行:

vim file.txt +"set ff=unix" +wq

您可以使用:

vim somefile.txt +"%s/\r/\r/g" +wq

或者dos2unix实用程序。

在Vim中,键入:

:w !dos2unix %

这将把当前缓冲区的内容通过管道传输到dos2unix命令,并在当前内容上写入结果。之后,Vim将要求重新加载文件。

将文件目录从DOS转换为Unix

使用命令行和sed,查找当前目录中扩展名为“.ext”的所有文件,并删除所有“^M”

@ https://gist.github.com/sparkida/7773170

find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;

此外,如前一个答案所述,^M=Ctrl+V+Ctrl+M(不要只键入插入符号“^”和M)。