将多行输出写入文件 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.).
有时,当我在 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.).