使用Vim,我正在尝试将在可视模式下选择的文本管道传输到UNIX命令,并将输出附加到当前文件的末尾。例如,假设我们有一个SQL命令,例如:
SELECT * FROM mytable;
我想做以下事情:
<ESC>
V " select text
:'<,'>!mysql -uuser -ppass mydb
但是我没有让输出覆盖当前选择的文本,而是希望将输出附加到文件的末尾。你可能会看到它的发展方向。我正在使用Vim作为一个简单的SQL编辑器。这样,我就不必让Vim进行编辑,调整,测试SQL代码。
答案 0 :(得分:7)
如何将所选文本复制到文件末尾,选择副本并运行命令?如果您不想一遍又一遍地重复相同的命令,则可以使用q
或添加新命令来记录序列。我按照以下方式尝试了后者:
:com -range C <line1>,<line2>yank | $ | put | .,$ !rev
使用它,您可以选择一些行,然后键入:C
。这将首先抽取选择,然后转到文件的末尾,粘贴抽出的文本并在新文本上运行命令(在这种情况下为rev
)。
答案 1 :(得分:1)
如果您更喜欢程序化方法,可以
:call append(line("$"), system("command", GetSelectedText()))
其中GetSelectedText
是可重复使用的函数:
func! GetSelectedText()
normal gv"xy
let result = getreg("x")
normal gv
return result
endfunc
答案 2 :(得分:0)
尝试
:r | YourCommand
例如:
:r ! echo foo
将foo
添加到缓冲区。