有时在vim中处理我的脚本时,我需要在临时文件中创建一些测试数据,其中包含多行内容,而且输入的工作量最小。我尝试使用通常的
cat << EOF ...
在vim命令行中,但看起来vim将第一个<cr>
解释为命令的结尾:
/bin/bash: warning: here-document at line 0 delimited by end-of-file (wanted 'EOF')
是否有某种方法可以在命令行缓冲区中输入多行输入,或者可能是另一种方法将给定的多行数据写入没有退出vim,运行:sh
或创建新缓冲区的文件?
答案 0 :(得分:1)
我觉得最简单的解决方案可能是直接输入你正在编辑的文件中,然后用v`[
或v{
直观地选择它。然后,您可以键入:
以对可视选择的文本进行操作,并使用:w yourfilename.txt
将其写入文件。删除文字或点击u
进行撤消。
这不完全是你要求的,所以这里还有其他一些选择:
滥用:!tee myfile
。在这里,您将被重定向到一个tee实例,它将stdin写入stdout以及指定的文件myfile
。事情将在屏幕上打印两次,你必须 CTRL - C ,但它完成的工作并不完全是你想要的。
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等)。