Нечетное поведение с копированием / вставкой в ​​FSI на Mac - PullRequest
1 голос
/ 30 января 2010

У меня вроде как работает Fsi.exe, как и ожидалось, на Mac OS X (Snow Leopard) с Mono. Я только заметил немного странное поведение с вырезкой и вставкой, и я задавался вопросом, видел ли кто-нибудь это.

Я определил следующий псевдоним для fsi:

alias fsi='ledit mono ~/FSharp-1.9.7.8_2/bin/fsi.exe --gui-'

ledit - это утилита Ocaml, которая, кажется, обеспечивает правильную работу ввода с клавиатуры - без нее, fsi просто никогда не читает ввод. Чтобы понять, что я имею в виду, попробуйте Fsi.exe без ledit и введите

let square x = x * x;;

без ледита, кажется, никогда не анализировать ввод. Я имею в виду, что он никогда не возвращается к приглашению «>» после ввода строки. С ledit приглашение «>» возвращается немедленно.

Конечно, --gui- не позволяет fsi отображать все сообщения об отсутствии System.Drawing и т. Д.

Так что, похоже, все это работает. Странность в том, что когда я копирую и вставляю код в FSI, некоторые символы, кажется, повторяются снова и снова. Кажется, это обусловлено размером буфера, в который я вставляю. Когда я вставляю небольшие фрагменты, проблем не возникает. Но если я вставлю куски большего размера, это странно.

Если я сделаю следующее:

open System.IO;;

затем вставьте этот фрагмент кода в FSI:

let buildFileList basepath filespec =
    seq {
        yield! Directory.GetFiles(basepath, filespec, System.IO.SearchOption.AllDirectories)
        }

Это отлично работает. Но если я скопирую и вставлю больший кусок кода, заканчивающийся этим, он повторяет часть до результата! снова и снова. Похоже, это как-то связано с попыткой fsi проанализировать код во время его вставки, потому что тот же самый вставленный код вызовет ошибки синтаксического анализа (например, FS0010) при вставке в конце длинного фрагмента, но не вызовет ошибку он изолирован.

Если я # загружаю весь файл, он также правильно анализируется, поэтому я думаю, что мой код в порядке.

Эта странность в копировании / вставке, кажется, происходит как с, так и без ledit в командной строке. Я не против исследовать эту проблему самостоятельно, но я как бы озадачен тем, где мне следует продолжить это. Я копирую из GVim, если это имеет значение, но у кого-нибудь есть идеи, где я мог бы попытаться выделить причину этого странного поведения? Я полагаю, что я мог бы сделать дополнительный шаг, сначала скопировав в TextEdit, а затем попытаться скопировать в fsi, но есть ли идеи помимо этого?

В итоге: кто-нибудь еще видел это странное поведение? Если нет, какие-либо предложения о том, как я могу поступить, пытаясь выделить причину этого странного поведения?

1 Ответ

2 голосов
/ 31 января 2010

Когда я столкнулся с таким поведением на моем Mac, я пошел другим путем. Вместо использования ledit я использовал опцию fsi --readline, показанную ниже (где ${FSHARP} - мой путь установки).

mono ${FSHARP}/fsi.exe --readline+ --gui-

Вы также можете проверить настройки терминала. Мой терминал (например) объявлен как xterm-color, а я снял отметку delete sends CTRL-H. Я думаю, что это единственные релевантные настройки, но не удерживайте меня на этом.

...