Почему моя программа командной строки на Haskell не получает аргументы от Vim Bang? - PullRequest
0 голосов
/ 08 ноября 2018

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))

1 Ответ

0 голосов
/ 08 ноября 2018

Команда ! отправляет выделенный текст в программу через стандартный ввод, а не как аргумент командной строки. Эквивалент командной строки будет somecommand | ./show-input.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...