Vim可以让您用外部程序的输出替换选定的文本。我想利用我在Haskell中编写的程序来利用这一点。但是它不会将所选文本作为args。
-show-input.hs
module Main where
import System.Environment
main = do
input <- getArgs
putStr ("Input was: " ++ (show input))
当我从命令行(NixOS GNU / Linux,BASH)运行它时,我得到了预期的行为:
$ ./show-input test
Input was: ["test"]
当我在Vim中选择一些文本并调用:'<,'>!~/show-input
时,我得到以下信息:
Input was: []
这里有些奇怪,但是我无法确定这是因为Vim传递参数还是Haskell传递参数。我已经尝试使用控制台Vim和图形gVim(8.0.1451),但结果相同。
注意:我可以成功使用Vim Bang!与其他外部程序,例如grep。效果很好。
因此,对于感兴趣的任何人,只需将getArgs
替换为getContents
,您就可以将输入全部输入字符串(而不是字符串列表)中。
module Main where
import System.Environment
main = do
input <- getContents
putStr ("Input was: " ++ (show input))
答案 0 :(得分:6)
!
命令通过标准输入而不是命令行参数将选定的文本发送到程序。等效的命令行为somecommand | ./show-input
。