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

时间:2018-04-24 09:06:17

标签: vim cat

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

cat << EOF ...
在vim命令行中

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

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

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

1 个答案:

答案 0 :(得分:1)

我觉得最简单的解决方案可能是直接输入你正在编辑的文件中,然后用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 结束多行字符串。然后,您必须保存缓冲区并返回原始缓冲区。

  

请注意,在vim命令模式下没有heredocs或多行字符串。但是有一些特殊的命令允许它们使用脚本语言,例如:py <<EOF(也是ruby,lua等)。