如何将可视选择的文本传递给UNIX命令,并将输出附加到Vim中的当前缓冲区

时间:2008-10-23 15:45:31

标签: sql vim editor vi

使用Vim,我正在尝试将在可视模式下选择的文本管道传输到UNIX命令,并将输出附加到当前文件的末尾。例如,假设我们有一个SQL命令,例如:

SELECT * FROM mytable;

我想做以下事情:

<ESC>
V                 " select text
:'<,'>!mysql -uuser -ppass mydb

但是我没有让输出覆盖当前选择的文本,而是希望将输出附加到文件的末尾。你可能会看到它的发展方向。我正在使用Vim作为一个简单的SQL编辑器。这样,我就不必让Vim进行编辑,调整,测试SQL代码。

3 个答案:

答案 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添加到缓冲区。