7

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

SELECT * FROM mytable;

我想做如下的事情:

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

但是,我不想让输出覆盖当前选定的文本,而是希望将输出附加到文件的末尾。您可能会看到这是怎么回事。我正在使用 Vim 作为一个简单的 SQL 编辑器。这样,我不必离开 Vim 来编辑、调整、测试 SQL 代码。

4

3 回答 3

7

如何将选定的文本复制到文件末尾,选择复制并运行命令?如果您不想一遍又一遍地重复相同的命令,您可以通过使用q或添加新命令来记录序列。我尝试了后者,如下所示:

:com -range C <line1>,<line2>yank | $ | put | .,$ !rev

有了它,您可以选择一些行,然后键入:C. 这将首先拉出所选内容,然后转到文件末尾,粘贴拉出的文本并rev在新文本上运行命令(在本例中)。

于 2008-10-23T16:51:51.430 回答
1

如果你更喜欢程序化的方法,你可以有

:call append(line("$"), system("command", GetSelectedText()))

GetSelectedText可重用函数在哪里:

func! GetSelectedText()
  normal gv"xy
  let result = getreg("x")
  normal gv
  return result
endfunc
于 2012-09-13T22:42:16.847 回答
0

尝试

:r | YourCommand

例如:

:r ! echo foo

添加foo到您的缓冲区。

于 2011-02-08T15:02:19.527 回答