为了账号安全,请及时绑定邮箱和手机立即绑定

如何用Vim中的换行符替换字符

/ 猿问

如何用Vim中的换行符替换字符

jeck猫 2019-08-28 16:14:57

如何用Vim中的换行符替换字符

我正在尝试用,新行替换当前文件中的每个:

:%s/,/\n/g

但它插入的内容看起来像是一个^@而不是实际的换行符。该文件不是DOS模式或任何东西。

我该怎么办?

如果你像我一样好奇,请检查问题为什么\ raim的换行?同样。


查看完整描述

3 回答

?
一只斗牛犬

用\r而不是\n。

通过\n在文本中插入空字符来替换。要获得换行符,请使用\r。但是,在搜索换行符时,您仍然会使用\n。这种不对称是由于事实\n和\r 稍微不同的事情:


\n匹配行尾(换行符),而\r匹配回车符。另一方面,在替换中\n插入空字符,同时\r插入换行符(更准确地说,它被视为输入<CR>)。这是一个小的非交互式示例,使用Vim命令行功能来说明这一点(换句话说,您可以将以下内容复制并粘贴到终端中以运行它)。xxd显示生成的文件的hexdump。


echo bar > test

(echo 'Before:'; xxd test) > output.txt

vim test '+s/b/\n/' '+s/a/\r/' +wq

(echo 'After:'; xxd test) >> output.txt

more output.txt

Before:

0000000: 6261 720a                                bar.

After:

0000000: 000a 720a                                ..r.

换句话说,\n已将字节0x00插入到文本中; \r已插入字节0x0a。


查看完整回答
反对 回复 2019-08-28
?
烧仙草VB

这是诀窍:

首先,设置vi(m)会话以允许模式匹配特殊字符(即:换行符)。将此行放在.vimrc或.exrc文件中可能是值得的。

:set magic

接下来,做:

:s/,/,^M/g

要获取^M角色,请键入Controlv并点击Enter。在Windows下,做ControlqEnter. 我记住这些的唯一方法就是记住它们的意义不大:

答:用于表示换行符的最差控制字符是什么?

B:要么q(因为它通常意味着“退出”),要么v因为它很容易打字Controlc错误地杀了编辑器。

答:这样做。


查看完整回答
反对 回复 2019-08-28
?
慕用2447696

在语法s/foo/bar \r\n具有不同的含义,这取决于上下文。


短:

对于foo
\ n =换行符(linux / mac上为LF,Windows上为CRLF)
\ r \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n

对于bar
\ r =是换行符
\ n =空字节。

更长:(用ascii数字)

NUL= 0x00 = 0 = CTRL@
LF= 0x0A = 10 = CTRLJ
CR= 0x0D = 13 =CTRLM

这是ASCII控制字符列表,将它们插入vimvia CTRLvCTRL---key---
bash或其他unix / linux shell中输入CTRL---key---。尽管linux系统使用Line Feeds进行行分隔,但尝试CTRLM使用bash,它与命中相同ENTER,因为shell实现了意义。

要在bash中插入文字,可以使用它们CTRLv

尝试bash:

echo ^[[33;1mcolored.^[[0mnot colored.

这使用ANSI转义序列,插入两个^[的via CTRLvESC

你也可以试试CTRLvCTRLmENTER,这会给你这个:

bash: $'\r': command not found

还记得\r上面的吗?:>

ASCII控制字符列表与完整的ASCII符号表不同,因为CTRL可以在那里找到通过密钥(haha)插入控制台/伪终端/ vim的控制字符。在C和大多数其他语言中,您通常使用八进制代码来表示这些“字符”。

如果您真的想知道所有这些来自何处:http//www.linusakesson.net/programming/tty/
这是关于这个主题你会遇到的最好的链接,但要注意:有龙。


TL; DR

通常foo\n,和bar\r


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 180 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信