我试图用一行新行替换当前文件中的每个,:
但它插入了看起来像^@的内容,而不是实际的换行。文件不在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文件中可能是值得的。
下一步,做:
要获取^M字符,请键入control v,然后单击enter。在Windows下,执行control q、enter。我唯一能记住这些的方法就是记住它们的意义有多小:
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
=,=。
你需要使用
要获取^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字符可以嵌入到一行中,并且您希望将它们转换为换行符。
但是如果必须替换,那么下面的事情就可以了
在上面,每一行都被下一行替换,然后-再替换下一行。这在wiki表中使用。如果文本如下:
改为
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"键。