将多行输出写入文件 w/o 创建另一个缓冲区

Write multi-line output to file w/o creating another buffer

有时,当我在 vim 中处理我的脚本时,我需要在临时文件中创建一些测试数据,其中包含多行内容,而输入工作量最小。我尝试使用通常的

cat << EOF ...

在vim命令行中,但看起来vim将第一个<cr>解释为命令的结尾:

/bin/bash: warning: here-document at line 0 delimited by end-of-file (wanted 'EOF')

是否有某种方法可以在命令行缓冲区中输入多行输入,或者是否有其他方法可以将给定的多行数据写入文件 w/o 退出 vim、运行 :sh 或创建新缓冲区?

我觉得最简单的解决方案可能是直接输入您正在编辑的任何文件,然后使用 v`[v{ 直观地选择它。然后你可以键入 : 对视觉选择的文本进行操作,并使用 :w yourfilename.txt 将其写入文件。删除文本或点击 u 撤消。

虽然这不是您所要求的,但这里有一些其他选项:

选项 1

虐待:!tee myfile。在这里您将被重定向到 tee 的一个实例,它将 stdin 写入 stdout 以及您指定的文件 myfile。事情会在屏幕上打印两次,你必须 CTRL-C 退出它,但它完成工作的方式并不完全你想要的

选项 2

command! -nargs=1 Scratch call Scratch("<args>")
fun! Scratch(args)
    exe 'e ' . a:args
    call feedkeys(":append^M")
endfun

这将生成一个命令 :Scratch,该命令接受一个文件名,然后打开该文件名的新缓冲区,并调用 :append 命令,该命令将附加多行文本字符串到当前缓冲区。您可以用 .CTRL-C 结束多行字符串。然后,您必须将缓冲区和 return 保存到原始缓冲区。

Note that there are no such things as heredocs or multi-line strings in vim command mode. There are however special commands that allow them for scripting languages such as :py <<EOF (also ruby, lua, etc.).