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

标签 vim replace escaping newline vi

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

:%s/,/\n/g 

但它插入了看起来像 ^@ 的内容,而不是实际的换行符。该文件不处于 DOS 模式或任何模式。

我应该做什么?

如果您像我一样好奇,请检查问题 Why is \r a newline for Vim? 也是如此。

最佳答案

使用\r而不是\n

\n 替换会在文本中插入一个空字符。要获取换行符,请使用 \r。但是,当搜索换行符时,您仍然会使用\n。这种不对称是由于 \n\r do slightly different things :

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

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。

关于vim - 如何在 Vim 中用换行符替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71323/

相关文章:

replace - 如何替换Logstash中的字段

c# - 逃避角色的最佳方式

mysql - 在 PHP/MySQL 中将 SQL 代码插入数据库

vim - 删除行尾的所有空格和制表符

vim - 如何在vim中的所有缓冲区中转到最后一个编辑位置?

vim - 如何在命令完成后让 Vim 从插入模式返回正常模式?

linux - 在 Vim 中重新映射 Escape 键(德语键盘)

javascript如何删除字符串的某一部分?

php - 如何使 PHP 正确转义 CSV (fgetcsv)?

c -\a在C语言中有什么用?