vim - Vim如何替换字符中有换行符?

  显示原文与译文双语对照的内容

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

 
:%s/,/n/g 

 

但是它插入看起来像 ^@的内容而不是实际的换行符。 文件不在DOS模式或者任何情况下。

我该怎么做?

于vim,相关编辑: 如果你很好奇,像我一样,请检查问题 为什么将 r 空行? 。

时间:

使用 r 而不是 n

n 替换文本中的空字符。 要获取换行符,使用 r 。 当搜索换行时,你仍然使用 n,但是。 这种不对称是由于 nr执行了稍微不同的事情,例如:

n 匹配行尾( 换行),而 r 匹配回车符。 另一方面,在替换中 n 插入一个空字符,而 r 插入一个换行符( 更确切地说,则它被当作输入 <铬> ) 。 下面是一个小的non-interactive示例,使用 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 已经将字节 0 x00插入到文本中;r 插入了字节 0 x0a 。

下面是窍门:首先,设置你的vi(m) 会话以允许与特殊字符匹配( IE: newline ) 。在. vimrc 或者. exrc 文件中放置此行可能是值得的。

 
:set magic

 

下一步,做:

 
:s/,/,^M/g

 

要获取^M字符,输入ctrl-v并按回车。 在 Windows 下,输入 ctrl-q 。 我记住这些的唯一方法是记住它们的意义:

用于表示换行符的最糟糕的control-character是什么"?

"'q'( 因为它通常意味着"退出") 或者'v',因为它很容易被错误地键入ctrl-c并杀死编辑器。"

使之如此。"

在语法 s/foo/barrn 有不同的含义,具体取决于上下文。


对于 foo:
n = 换行符
r = CR ( 回车= Ctrl-M = ^M )

对于 bar:
r = 换行符
n = 空字节( 0 x00 ) 。


我曾经在过去经常看到过这样的问题,将来有些时候几乎没有人知道这些东西。

按'热门'请求:

这里是其中一个的ASCII控制字符列表,插入在通过 CTRLvimvCTRL---key---
bash 或者其他 unix/linux shell只需键入 CTRL---key--- 。 于delimiting,请换相关 CTRLM 在 bash,它的相同的命中时有输入,为shell的实现了指,即使linux系统都使用线条feeds.是什么 行提要的控制字符是 CTRL-A,它绑定到bash中的'跳转到行首'。

要插入到的字面 bash,CTRLv 也会相当不错。

在bash中尝试:


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

这种利用 ANSI转义序列的,插入这两个 ^[ 通过 CTRLvESC

你也可能尝试 CTRLvCTRLm 输入,这将为你这样:


bash: $'r': command not found

记住上面的r? :>

ASCII控制字符列表所采用的与 ASCII的控制字符,这些内容可以插入符号表,在那个一部 console/pseudoterminal/vim 通过 CTRL 关键( 哈哈哈哈),那里可以找到。 而在c语言和大多数其他语言中,通常使用八进制代码来表示这些'字符'。

如果你真的想知道这些来自哪里: http://www.linusakesson.net/programming/tty/
这是你将遇到的关于这个主题的最佳链接,但请注意: 还有龙。


tl;博士

通常 foo = nbar = r

真空感应 Windows 上使用 Ctrl代替 Ctrl + V, + Q

你需要使用

 
:%s/,/^M/g

 

若要获得 ^M 人物,按 CtrlV 后跟输入

r 可以在这里为你工作。

从 Eclipse 中,^M 字符可以嵌入一行中,你想要将它们转换为换行符。

 
:s/r/r/g

 

但是如果你必须替换,那么接下来的事情就可以了

 
:%s/n/r|-r/g

 

在上面的每行中,下一行将替换为下一行,然后替换为下一行。 在wiki表格中使用。 如果文本如下:

 
line1
line2
line3

 

更改为


line1
|-
line2
|-
line3

如果你需要对整个文件进行操作,那么也建议你从 命令行 尝试


sed 's/n/n/g' file> newfile

这是我工作的答案。 来自这个人

----quoting http://jaysonlorenzen.wordpress.com/2009/04/28/use-vi-editor-to-insert-newline-char-in-replace/


我必须做的其他事情,不能记住,然后必须查找。

在vi中,在搜索和替换中插入换行符,执行以下操作:

:%s/look_for/replace_with^M/g 上面的命令会将"look_for"的所有实例替换为"replace_withn"( 带 n 意义结尾的换行符)

在那之后( 释放所有键) 按"输入"key,来获取"^m",输入的组合键"ctl-v"then.


...