如何在Vim命令行无需额外缓冲区向文件写入多行内容?
哈哈,这个坑我之前也踩过!在Vim里直接用cat << EOF确实会因为命令行缓冲区默认不支持多行输入而翻车,给你几个实用的小技巧,保证用最少操作搞定多行测试数据:
方法1:用Vim内置函数一键生成(最推荐)
直接在命令行模式输入这条命令就行,不用处理换行符,输入量极小:
:call writefile(['第一行测试数据', '第二行内容', '第三行随便写'], 'test.txt')
原理是调用Vim的writefile()函数,把数组里的每一项作为一行写入指定文件,完美解决多行输入的问题,适合提前知道测试内容的场景。
方法2:让命令行缓冲区支持多行输入
如果非要用类似cat << EOF的语法,得给Vim的命令行加换行:
- 先输入
:cat << EOF > test.txt - 按下
Ctrl+V(注意是Vim命令行里的操作,不是终端的),再按Enter,此时命令行会换行,光标跳到下一行 - 输入第一行测试数据,重复
Ctrl+V+Enter换行,依次输入后续内容 - 最后一行输入
EOF,按回车执行就行
这个方法适合临时想输入不确定内容的情况,就是操作步骤比第一个多一点。
方法3:先写内容再保存(最直观)
如果不想折腾命令行,直接开个新缓冲区写内容:
- 输入
:new打开新窗口,在里面输入所有测试行 - 输入
:w test.txt保存到临时文件 - 输入
:q关闭这个窗口就行
这种方式完全不用记命令,适合内容较多或者需要编辑调整的测试数据。
方法4:结合shell的printf命令
要是你习惯shell语法,也可以用:r!调用外部命令:
:r! printf "第一行\n第二行\n第三行\n" > test.txt
不过这个需要手动给每行加\n换行,适合内容比较短的情况。
内容的提问来源于stack exchange,提问作者Student4K
相关产品推荐
相关产品推荐

