如果我打开在Windows中创建的文件,所有行都以^M结尾。如何一次删除这些字符?
当前回答
在Vim中,键入:
:w !dos2unix %
这将把当前缓冲区的内容通过管道传输到dos2unix命令,并在当前内容上写入结果。之后,Vim将要求重新加载文件。
其他回答
在Vim中,键入:
:w !dos2unix %
这将把当前缓冲区的内容通过管道传输到dos2unix命令,并在当前内容上写入结果。之后,Vim将要求重新加载文件。
这比你要求的要多一点,但是:
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如果您想删除或添加一些字符,那么应该很容易更改上面的字符范围
您可以使用:
vim somefile.txt +"%s/\r/\r/g" +wq
或者dos2unix实用程序。
tr -d '\15\32' < winfile.txt > unixfile.txt
(请参见:在Unix和Windows文本文件之间转换)
更改视图中的行尾:
:e ++ff=dos
:e ++ff=mac
:e ++ff=unix
这也可以用作保存操作(:w单独保存不会使用屏幕上看到的行尾):
:w ++ff=dos
:w ++ff=mac
:w ++ff=unix
您可以从命令行使用它:
for file in *.cpp
do
vi +':w ++ff=unix' +':q' "$file"
done