Vim имеет возможность позволить вам заменить выбранный текст с выводом внешней программы.Я хотел бы воспользоваться этим с программами, которые я написал бы на Haskell.Но он не получает выделенный текст в виде аргументов.
- 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))