其中 <Ctrl-V><Ctrl-Enter> 表示 press and hold Ctrl,按下并释放V,按下并释放回车, and then release Ctrl .
如果您正在处理Windows生成的文件
上面的解决方案将在现有行之间添加一条额外的行,因为 ^M 之后已经有一个不可见的 \r .
要防止这种情况,您需要删除 ^M 字符而不替换它们 .
:%s/<Ctrl-V><Ctrl-Enter>//g
% 表示"in this buffer," s 表示"substitute," / 表示"(find) the following pattern," <Ctrl-V><Ctrl-Enter> 表示按下以获取 ^M 字符的键(见上文), // 表示"with nothing"(或"with the pattern between these two slashes, which is empty"), g 表示 flag 表示"globally,",而不是第一次出现一条线 .
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()
30 回答
这对我有用:
将文件格式设置为unix(
\n
行结束)保存文件
所以在vim中:
我花了一个下午与\ n ctrl-v 012挣扎(两者都为我提供了null) . 并通过这个线程努力,直到我达到metagrapher的 .
\r
对我来说很好!变成了这样的东西:
变成这样的东西:
魔法 . 我非常感激
这个问题有很多其他答案,但是,以下对我来说最好,因为我需要一个命令行解决方案:
说明:
如果不加载任何.vimrc文件,请打开
myfile
运行
:e ++ff=dos
强制重新加载整个文件作为dos行结尾 .运行
:w ++ff=unix
以使用unix行结尾写入文件退出vim
为了使^ M字符匹配,我必须在视觉上选择它,然后使用OS copy to clipboard命令来检索它 . 您可以在尝试之前搜索角色来测试它替换命令 .
应该选择第一个坏线
将用回车代替所有错误的^ M.
这是MacVim中的功能,它基于gvim 7 .
EDIT:
在我的Windows 10计算机上再次出现此问题,该计算机具有Ubuntu for Windows,我认为这会导致vim的文件格式问题 . 在这种情况下,将ff更改为unix,mac或dos只会将^ M更改为^ J并再次返回 .
在这种情况下的解决方案:
我走这条路的原因是因为我想确保我对我的文件没有破坏性 . 我可以
:%s/\r$//g
但是这会立即删除回车,并且可能会有意想不到的结果 . 相反,我们将单个CR字符(这里是一个^ M字符)转换为空格,然后删除行末尾的所有空格(无论如何,这对我来说都是理想的结果)很抱歉恢复了一个早已被回答的旧问题,但似乎有一些混乱,我认为我会帮助清除一些,因为这在谷歌搜索中很高 .
Ctrl M最小化我的窗口,但Ctrl Enter实际上插入了
^M
字符 . 我还必须确保不要在按下之间取下Ctrl键 .所以我的解决方案是:
其中
<Ctrl-V><Ctrl-Enter>
表示 press and hold Ctrl,按下并释放V,按下并释放回车, and then release Ctrl .如果您正在处理Windows生成的文件
上面的解决方案将在现有行之间添加一条额外的行,因为
^M
之后已经有一个不可见的\r
.要防止这种情况,您需要删除
^M
字符而不替换它们 .%
表示"in this buffer,"s
表示"substitute,"/
表示"(find) the following pattern,"<Ctrl-V><Ctrl-Enter>
表示按下以获取^M
字符的键(见上文),//
表示"with nothing"(或"with the pattern between these two slashes, which is empty"),g
表示 flag 表示"globally,",而不是第一次出现一条线 .我知道这可能太旧了,但希望有人能发现它有用 .
使用这些命令:
要么
或者,您可以使用此命令修复换行符,而不是使用vim
希望能帮助到你!
首先,使用
:set ff?
来确定文件的文件格式 .我想它可能是
unix
,那么问题是你的文件是用fileformat=dos
创建的,将"^M^J"添加到行尾,但只读flieformat=unix
只从行末端删除"^J",留下"^M" .只需在Vim命令行输入
:e ++ff=dos
即可将文件格式从unix更改为dos . 它应该解决问题 . 如果没有,:%s/\r//g
应该帮助你 .我在 MacVim 中看到的用BBEdit创建的文件显示了一堆
^M
行返回而不是常规返回 . 以下字符串替换解决了问题 - 希望这有助于:这很有趣,因为我用相同的字符替换换行符,但我想Vim只需要一个新的\ r来正确显示 . 我有兴趣了解其原因的基本机制 .
无需使用Ctrl:
:%s/\r$//
这对我有用:
如果您使用
Shift+6 Caps+M
键入^M
,则不接受 .您需要输入
ctrl+v ctrl+m
.只需删除.vimrc中的
set binary
即可!要 save keystrokes ,您可以通过将其放在映射中来避免键入Ctrl VCtrl M.只需打开一个包含^ M字符的文件,将其拉出,然后将其粘贴到.vimrc中的这样的行中:
^M
给出了不需要的换行符 . 为了解决这个问题,我们可以使用sed
命令,如下所示:在使用vim和eclipse时,这些建议都没有为我设法获得
^M
换行符 . 我怀疑我遇到了一个外部案件,但万一我能帮助任何人 .它解决了我的问题
其中^ M是通过同时按下3个键来键入的,ctrl v m
在Linux和Mac OS上,以下工作,
其中
^V^M
表示键入Ctrl V,然后按Ctrl M.注意:在Windows上,您可能希望使用^ Q而不是^ V,因为默认情况下^ V被映射到粘贴文本 .
简单的事情对我有用
就我而言,
没有上面的工作,我有一个CSV文件从我的Mac复制到Linux机器,我使用了上述所有命令,但没有任何帮助,但下面的一个
我有一个文件,其中^ M个字符在下面的行之间被切换
如果文件是在Windows上创建的,请使用dos2unix实用程序,如果文件是在mac上创建的,请使用mac2unix实用程序 . :)
这是唯一对我有用的东西:
发现于:http://vim.wikia.com/wiki/File_format
我用sed做了这个:
sed -i -e 's/\r/\n/g' filename
或者,有一些名为dos2unix和unix2dos的开源实用程序可以执行此操作 . 在Linux系统上,它们可能默认安装;对于Windows系统,您可以从http://www.bastet.com/等下载它们 .
命令
其中
<Ctrl-V><Ctrl-M>
表示键入Ctrl V,然后按Ctrl M.解释
替代,%=所有行
^ M个字符(Ctrl-V是写入Ctrl ^字符的Vim方式,Ctrl-M在正则表达式后写入M,产生^ M特殊字符)
新行(
\r
)并在全球范围内进行(不仅仅是第一次出现在线上) .
这些都不适合我,所以我尝试了这个,这有效:
输入
:%s/
按CTRL-VCTRL-M
输入
//g
按Enter键
所以Vim的总体命令看起来像
:%s/^M//g
这样做:
:%s
(查找和替换)/^M/
(该符号)/
(没有字符)g
(全局) .“此函数保留跳转列表
在
vim
中,查看文件格式 - DOS或Unix::set filetype = unix
:set fileformat=unix
该文件将被回写而没有回车符(CR,^ M)字符 .
那怎么样:
:%s/\r//g
这完全适合我 .这样做只是为了清理所有行的行尾,它删除了^ M,就是这样 .
^ M由Ctrl V和M检索,也是如此