如果我打开在Windows中创建的文件,所有行都以^M结尾。如何一次删除这些字符?
当前回答
在VIM中:
:e ++ff=dos | set ff=unix | w!
带VIM的外壳:
vim some_file.txt +'e ++ff=dos | set ff=unix | wq!'
e++ff=dos-强制以dos格式打开文件。
set ff=unix-将文件转换为unix格式。
其他回答
我更喜欢使用以下命令:
:set fileformat=unix
您还可以使用mac或dos分别将文件转换为mac或MS-dos/Windows文件约定。如果文件已经是正确的格式,它也不会起作用。
有关更多信息,请参阅Vim帮助:
:help fileformat
在VIM中:
:e ++ff=dos | set ff=unix | w!
带VIM的外壳:
vim some_file.txt +'e ++ff=dos | set ff=unix | wq!'
e++ff=dos-强制以dos格式打开文件。
set ff=unix-将文件转换为unix格式。
:g/Ctrl-v Ctrl-m/s///
CtrlM是字符\r,或回车符,DOS行结尾添加该字符。CtrlV告诉Vim在命令行中插入文字CtrlM字符。
作为一个整体,该命令将所有\r替换为无,并将它们从行的末尾删除。
:%s/\r\+//g
在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如果您想删除或添加一些字符,那么应该很容易更改上面的字符范围