如何在vim中用换行符替换字符

如何在vim中用换行符替换字符

How to replace a character by a newline in Vim

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

1
2
:%s/,/
/g

但它插入了看起来像^@的内容,而不是实际的换行。文件不在DOS模式或其他模式下。

我该怎么办?

如果您和我一样好奇,请检查问题:为什么为vim添加新行?也。



代替


替换将在文本中插入一个空字符。要获得新线,请使用
。然而,在搜索新行时,您仍然可以使用
。这种不对称是由于

做的事情略有不同:


匹配行尾(换行),而
匹配回车。另一方面,在替换中,
插入一个空字符,而
插入一个换行符(更准确地说,它被视为输入)。下面是一个小的、非交互式的示例,通过使用VIM命令行功能来说明这一点(换句话说,您可以将以下内容复制并粘贴到终端中以运行它)。xxd显示结果文件的十六进制转储。

1
2
3
4
5
6
7
echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/
/'
'+s/a/
/'
+wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
1
2
3
4
Before:
0000000: 6261 720a                                bar.
After:
0000000: 000a 720a                                ..r.

换句话说,
已将字节0x00插入文本;
已插入字节0x0a。


诀窍如下:

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

1
:set magic

下一步,做:

1
:s/,/,^M/g

要获取^M字符,请键入control v,然后单击enter。在Windows下,执行control qenter。我唯一能记住这些的方法就是记住它们的意义有多小:

A: What would be the worst control-character to use to represent a newline?

B: Either q (because it usually means"Quit") or v because it would be so easy to type Control-c by mistake and kill the editor.

A: Make it so.


在语法和s/foo/bar

有不同的意义,取决于上下文。

短:

foo
换行(LF)在Linux / Mac的Windows下的CRLF)
R =回车(CR)

bar
R =是换行
n = 0字节。

气味:(与ASCII码号码)

NUL==0=0x00 ctrl @
LF==10=0x0a ctrlj
CR= = = ctrlm 0x0d 13

这里是列表中的ASCII控制字符,插入他们在vim密钥通过ctrlvctrl————
bash或其他UNIX / Linux的shell只是ctrl型————密钥。尝试ctrlm在bash中,其enter相同的AS,AS realizes壳是什么意思,即使使用Linux系统的delimiting饲料行线。

要插入文字的prepending bash,所以他们有ctrlv想工作。

在bash:try

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

本使用ANSI转义序列,通过插入两ctrlvesc ^[吗。

所以你可能想尝试ctrlvctrlmenter,这给你。

1
2
bash: $'
'
: command not found

从以上
记得吗?:>

这是一个ASCII控制字符列表从一个完整的ASCII符号表不同,它是控制字符,这是插入A控制台/假顶生)以ctrl密钥(哈哈),我们可以找到。而在C和其他语言,你都必须使用八进制码到论文的代表人物。

如果你真的想知道这是来自:http:/ / / / / www.linusakesson.net编程tty(终端)。
这是最好的链接,你会在关于这个主题,但注意:有龙。

铊;博士

通常foo
bar
=,=。


你需要使用

1
:%s/,/^M/g

要获取^M字符,请按ctrl v,然后按enter



可以在这里为您工作。


在Windows上使用VIM时,使用CtrL+Q代替CtrL+VbkBD


这是最好的方式,我认为答案是,但它会是更好的在一个表:http:/ / / / 12389839 stackoverflow.com 962394。

因此,rewording:

你需要使用
to use a换行(ASCII 0x0a,UNIX换行)正则表达式替换,但这是一个独特的替代都认为你应该继续使用

for for换行和回车。

这是因为在一个
VIM使用替换的字符(ASCII 0x00尼罗河均值)。你可能已经有一个好的\0尼罗河,释放其正常使用的
换行,但已经有一\0正则表达式的意义在什么replacements所以它移到
。因此,要继续到"换行和
因此移到
(这是a正则表达式模式中0x0d回车字符,ASCII)。

1
2
3
4
5
6
7
8
9
10
character                | ascii code | C representation | regex match | regex replacement
-------------------------+------------+------------------+-------------+------------------------
nil                      | 0x00       | \0               | \0          |

line feed (unix newline) | 0x0a       |
               |
          |
carriage return          | 0x0d       |
               |
          | <unknown>

注:^M(按Ctrl - V M a当插入换行符在Linux)中使用的正则表达式替换,而比别人有我As a回车(我想它)。

所以要注意翻译的Vim换行字符特殊文件时,它是基于其文件格式可以设置和工业问题。


在Eclipse中,^M字符可以嵌入到一行中,并且您希望将它们转换为换行符。

1
2
3
:s/
/
/g

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

1
2
3
4
:%s/
/
\|\-
/g

在上面,每一行都被下一行替换,然后-再替换下一行。这在wiki表中使用。如果文本如下:

1
2
3
line1
line2
line3

改为

1
2
3
4
5
line1
|-
line2
|-
line3

如果你需要做一个完整的文件,它也建议我,你可以尝试从命令行

1
2
3
sed 's/\
/
/g'
file > newfile

这是对我有用的答案。从这个家伙

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

我还得做一些我记不起来的事,然后再去看看。

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

:%s/查找/替换为^m/g上面的命令将"look"的所有实例替换为"replace"with (with 表示换行)

若要获得"^m",请输入组合键"ctl-v",然后(释放所有键)按"Enter"键。


推荐阅读

    linux命令替换的字符?

    linux命令替换的字符?,命令,数据,系统,商业,字符串,文件,内容,方法,批量,字

    linux命令行模式登录?

    linux命令行模式登录?,系统,密码,信息,状态,情况,终端,环境,管理,电脑,位置,l

    linux复制命令文件?

    linux复制命令文件?,系统,文件,命令,目录,基本知识,源文件,目标,文件夹,路

    linux下文件均分命令?

    linux下文件均分命令?,管理,情况,系统,工作,信息,地址,命令,目录,单位,设备,L

    linux查文件数量命令?

    linux查文件数量命令?,系统,数据,电脑,命令,文件,信息,代码,对比,软件,第三,l

    linux命令模式加行?

    linux命令模式加行?,工作,地址,系统,命令,工具,正规,信息,时间,第一,模式,Lin

    linux命令行模式使用?

    linux命令行模式使用?,工作,地址,目录,信息,名称,系统,管理,命令,文件,标准,l

    linux命令去重文件?

    linux命令去重文件?,系统,工作,命令,信息,数据,环境,代码,文件,目录,操作,Lin

    linux解压命令不替换?

    linux解压命令不替换?,系统,工作,设备,工具,异常,平台,环境,信息,命令,预期,L

    linux匹配文件名命令?

    linux匹配文件名命令?,系统,时间,发行,位置,工具,软件,名称,盘后,电脑,盘中,l

    改文件名linux命令?

    改文件名linux命令?,名字,软件,文件,命令,位置,系统,文件名,目录,指令,方面,l

    linux命令文件加锁?

    linux命令文件加锁?,数据,密码,系统,设备,代码,地址,名单,信息,数字,统一,请

    linux命令行字符隐藏?

    linux命令行字符隐藏?,系统,标准,信息,名称,代码,工具,文件夹,命令,文件,语

    linux拼接文件命令?

    linux拼接文件命令?,文件,数据,命令,代码,时间,信息,系统,情况,管理,标准,Lin

    linux文件常用命令?

    linux文件常用命令?,工作,地址,信息,系统,命令,目录,标准,情况,管理,常用命

    linux字符动画命令?

    linux字符动画命令?,工作,系统,地址,信息,命令,目录,工具,时间,标准,基础,Lin

    文件写入linux命令?

    文件写入linux命令?,文件,命令,状态,系统,名称,时间,首次,数据,数字,内容,在l

    linux命令写满文件?

    linux命令写满文件?,地址,工作,命令,系统,管理,文件,目录,标准,电脑,信息,Lin

    文件夹排序linux命令?

    文件夹排序linux命令?,系统,数字,信息,工作,时间,命令,管理,设备,单位,工具,

    linux打开文件夹命令?

    linux打开文件夹命令?,工作,系统,信息,命令,图片,文件,管理,发行,名字,名称,