如何在Vim中将可视选定的文本导入UNIX命令,并将输出附加到当前缓冲区

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

我希望能够像下面这样做:

我想要实现以下操作:

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

但是,我希望输出的内容不要覆盖当前选定的文本,而是追加到文件末尾。你可能已经看出来了,我正在尝试将Vim作为简单的SQL编辑器使用。这样,我就不必离开Vim来编辑、调整和测试SQL代码。


谢谢!这个命令按预期工作了。这是我使用的实际命令:com -range C ,yank | $ | put | .,$ !/usr/local/mysql/bin/mysql -uuser mydb我在文本文件中有一行"select * from table;",然后我只需按下<ESC>:C,它就会将输出转储到文件末尾。 - Damon Snyder
3个回答

7

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

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

使用它,您可以选择一些行,然后键入:C。这将首先复制所选内容,然后跳转到文件末尾,粘贴已复制的文本并在新文本上运行命令(在此情况下为rev)。


1
如果您更喜欢编程方法,您可以使用以下代码:
:call append(line("$"), system("command", GetSelectedText()))

其中GetSelectedText是可重复使用的函数:

func! GetSelectedText()
  normal gv"xy
  let result = getreg("x")
  normal gv
  return result
endfunc

0

尝试

:r | YourCommand

例如:

:r ! echo foo

foo添加到您的缓冲区。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接