Как я могу вставить обратную галочку в GHCi?

Я пробую Haskell в GHCi на Windows. В руководстве, которому я следую, имя функции заключено в обратные кавычки: x `mod` 7. Однако я не могу ввести персонажа в GHCi.

Символ обратной галочки имеет значение ASCII 096, но GHCI не позволяет Alt + номер вставлять любой символ. Копирование/вставка тоже не работает. Что я должен делать?


person Martin    schedule 26.09.2015    source источник
comment
Я не уверен, правильно ли я понимаю проблему, но символ обратной кавычки обычно располагается на клавише сразу слева от клавиши 1 на большинстве клавиатур: i.stack.imgur.com/TOn1U.png.   -  person David Young    schedule 26.09.2015
comment
Моя версия GHCi принимает обратную кавычку непосредственно с моей клавиатуры (хотя моя клавиатура не EN-US), а также принимает ее при вставке. Если вы используете Windows, запустите GHCi на Powershell вместо запроса на использование Ctrl+V для вставки.   -  person Mephy    schedule 26.09.2015
comment
У итальянской клавиатуры есть \ слева от 1, извините   -  person Martin    schedule 26.09.2015
comment
Если вы не найдете другого подхода, вы всегда можете использовать GHCi через emacs, у которого есть другие, более существенные преимущества.   -  person dfeuer    schedule 26.09.2015
comment
Этот вопрос суперпользователя может помочь: Итальянская клавиатура: ввод символов тильды (~) и обратной кавычки (`) без изменения раскладки клавиатуры.   -  person duplode    schedule 26.09.2015
comment
Что ж, следует отметить, что обратные кавычки никогда не необходимы. x `mod` 7 совпадает с mod x 7. Обратные кавычки — это просто способ использовать функцию инфиксным образом. Кроме того, эти параметры не кажутся особенно удобными, но вот некоторая информация о наборе обратных кавычек на итальянской клавиатуре: superuser.com/questions/598135/   -  person David Young    schedule 26.09.2015
comment
@mephy Powershell работает как Cmd, без ctrl/v и без обратных кавычек в GHCi. Вне GHCi эти символы вставляются нормально. Кажется, это GHCi их ест   -  person Martin    schedule 26.09.2015
comment
Я знаю, как добавлять символы ascii, это не вопрос. Речь идет о том, как убедить GHCi не игнорировать их, когда я их печатаю! GHCI, кажется, игнорирует довольно много того, что набирается; все CTRL/*, все щелчки мышью, все символы ALT/***.   -  person Martin    schedule 26.09.2015
comment
В самом деле, как только вы поработаете с Haskell в правильно сконфигурированном emacs (несколько сложном в настройке, я признаю), даже боль от emacs будет казаться незначительной по сравнению с преимуществами, которые вы получаете от обратной связи почти в реальном времени с flycheck, HLint и т. д. И сопоставить что-то с обратной кавычкой будет довольно легко.   -  person dfeuer    schedule 26.09.2015
comment
Я предполагаю, что это больше проблема раскладки клавиатуры + кодировки терминала, а не столько самого ghci.   -  person JustGage    schedule 26.09.2015
comment
Кажется, что все думают об этом как о проблеме с Windows, но это НЕ так: это GHCI, который игнорирует символ, правильно набранный с помощью цифровой клавиатуры. Думаю, я буду рад последовать совету Дэвида и внести изменения в обучающие примеры. Спасибо вам всем.   -  person Martin    schedule 26.09.2015
comment
@Martin Вы пробовали использовать WinGHCi? Я думаю, что это все еще идет с платформой Haskell, и у нее есть интерфейс с графическим интерфейсом, а не использование cmd.   -  person David Young    schedule 26.09.2015
comment
Не по касательной: работают ли Ctrl+Insert и Shift+Insert для копирования и вставки в PowerShell+GHCi? (Я смутно помню, что делал это в прошлом.)   -  person duplode    schedule 26.09.2015
comment
Поддерживает ли командное окно копирование и вставку, это не зависит от оболочки. Вы можете активировать копирование и вставку (и другие полезные вещи) в диалоговом окне настроек командного окна, доступ к которому осуществляется из его системного меню: щелкните левой кнопкой мыши значок окна в верхнем левом углу окна, выберите настройки.   -  person Toxaris    schedule 26.09.2015
comment
@Toxaris: это НЕ проблема Windows, это проблема GHCi   -  person Martin    schedule 26.09.2015
comment
@Мартин: Хм. Я могу подтвердить, что вставка с помощью Ctrl-V не работает в ghci. Однако я только что попытался вставить правой кнопкой мыши в ghci, работающий в командном окне Windows, и он отлично работает. GCI 7.8.3, Windows 8.1   -  person Toxaris    schedule 26.09.2015
comment
Используйте Win7, правый клик не показывает обычное меню Выбрать, вставить и т. д. не в Cmd, не в Powershell   -  person Martin    schedule 26.09.2015
comment
Я предполагаю, что основная проблема заключается в том, что ghci использует readline (или, может быть, какой-то порт readline на Haskell, я забыл), который определяет свои собственные комбинации клавиш CTRL-Whatever. Может быть, readline можно настроить, чтобы дать вам комбинацию клавиш для вставки обратной кавычки?   -  person Toxaris    schedule 26.09.2015
comment
Вы активировали режим быстрого редактирования и режим вставки в настройках командного окна? Я почти уверен, что они существовали по крайней мере для нескольких версий Windows.   -  person Toxaris    schedule 26.09.2015
comment
Нашел WinGHCi все-таки, (его нет в карте BIN, значит нет и в ПУТИ) и он работает. @ Дэвид Янг: сформулируй ответ, и я отмечу его как правильный   -  person Martin    schedule 26.09.2015
comment
@Martin Ну, в существующем ответе рекомендуется использовать WinGHCi, поэтому я бы предложил пометить это как правильное.   -  person David Young    schedule 26.09.2015


Ответы (2)


Я не знаю, как отправить обратную галочку в ghci, если на вашей клавиатуре ее нет. Но эта небольшая техническая проблема не должна помешать вам попробовать Haskell!

  • Вы можете программировать на Haskell без обратных кавычек, используя f a b вместо a `f` b. В вашем примере mod x 7.

  • Вы можете установить американскую раскладку клавиатуры для программирования. Хотя требуется некоторая практика, чтобы найти клавиши с неправильными метками на физической клавиатуре, может быть удобно иметь более доступные [, ], { и }, а в вашем случае вообще иметь обратную кавычку.

  • Вы можете вставить обратную галочку из буфера обмена. (Активируйте «режим быстрого редактирования» и «режим вставки» в настройках командного окна, а затем используйте правую кнопку мыши для вставки).

  • Может быть, помогает использование обертки вокруг командного окна? Иногда я использую Console2, а иногда M-x shell в Emacs.

  • Может WinGHCi поможет? По крайней мере, он поддерживает копирование и вставку.

  • См. Ответ Орьяна Йохансена о том, как добавить пользовательскую привязку клавиш к ghci.

Удачи с Хаскеллом!

person Toxaris    schedule 26.09.2015
comment
Консоль Windows не поддерживает CTRL-V для вставки (фактически, она вообще не поддерживает сочетания клавиш для вставки) - кажется, за исключением Windows 10: stackoverflow.com/questions/131955/ - person melpomene; 27.09.2015
comment
Действительно? Как раздражает. Я постоянно использую CTRL-V с командной строкой в ​​консоли Windows, но теперь я понял, что она предоставляется mridgers.github.io/clink не ванильная консоль или командная строка. Извините за мое замешательство. - person Toxaris; 27.09.2015

@Toxaris дал несколько предложений в своем ответе, но в комментарии он также упомянул возможность настройки версии GHCi readline (которая называется haskeline). Кроме того, он позволяет назначать собственные сочетания клавиш. Поэтому я решил проверить это.

В документации говорится, что настройки нужно помещать в ~/.haskeline, что не является путем Windows, но предположительно переводится в .haskeline в любом каталоге, возвращаемом System.Directory.getHomeDirectory. (vim также может редактировать этот путь непосредственно в Windows, но я понял это только потом.) Поэтому я добавил следующее в C:\Users\Ørjan\.haskeline:

bind: meta-' `

Теперь я могу получить ` в GHCi, нажав alt-'!

person Ørjan Johansen    schedule 27.09.2015
comment
Извините, что уже указал правильный ответ: ВАШЕ - это то, что я искал. Поместите его в то, что Windows называет HOMEPATH (c:\users\myname). Ткс. - person Martin; 27.09.2015
comment
@Martin, я думаю, вы можете изменить ответ, который вы принимаете. Я рад, что мы решили вашу проблему. - person Toxaris; 27.09.2015