Вставка текста в IRB невероятно медленная. Проблема с ридлайном?

Когда я вставляю следующий текст в IRB или PRY, работающий под управлением ruby-enterprise-2011.03, это занимает 13 секунд.

# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Вставка не замедляется при запуске irb с другими установками ruby ​​​​на том же компьютере.

  jruby-1.5.6
  jruby-1.6.3
  ruby-1.8.6-p420
  ruby-1.8.7-p352
  ruby-1.9.1-p431
  ruby-1.9.2-p290
  ruby-1.9.3-preview1
  or Mac OS X's default system install of 1.8.7-p249

Этот вопрос связан с консолью Rails, работающей невероятно медленно при редактировании текста, но я не использую rvm, и при написании, редактировании или удалении текста медлительности нет; Только вставка идет медленно. Предложение @ fl00r работает, но это не постоянное исправление.

Кроме того, если во вставленном тексте есть жесткие символы новой строки, то только последняя строка будет медленной. Например, вставка следующего текста занимает всего около 1,5 секунд.

# Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
# sed do eiusmod tempor incididunt ut labore et dolore magna 
# aliqua. 

Я заметил, что REE загружает копию libreadline, которую не загружает ни одна из других установок ruby. Есть ли способ настроить и скомпилировать REE, чтобы игнорировать файл libreadline из MacPorts?

require 'readline'
puts `lsof -p #{$$} | grep -i readline | awk '{print $9}'`
puts

Я запустил приведенный выше скрипт на нескольких установках ruby. Только две последние установки (установки REE) включают дополнительную строку libreadline.

=== ruby-1.8.6-p36 ======================
/opt/ruby-1.8.6-p36/lib/ruby/1.8/i686-darwin11.2.0/readline.bundle

=== ruby-1.8.6-p420 ======================
/opt/ruby-1.8.6-p420/lib/ruby/1.8/i686-darwin11.0.1/readline.bundle

=== ruby-1.8.7-p352 ======================
/opt/ruby-1.8.7-p352/lib/ruby/1.8/i686-darwin11.0.1/readline.bundle

=== ruby-1.9.1-p431 ======================
/opt/ruby-1.9.1-p431/lib/ruby/1.9.1/i386-darwin11.0.1/readline.bundle

=== ruby-1.9.2-p290 ======================
/opt/ruby-1.9.2-p290/lib/ruby/1.9.1/x86_64-darwin11.0.1/readline.bundle

=== ruby-1.9.3-preview1 ==================
/opt/ruby-1.9.3-preview1/lib/ruby/1.9.1/x86_64-darwin11.0.1/readline.bundle

=== ruby-enterprise-1.8.7-2011.03 ========
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/1.8/i686-darwin11.0.1/readline.bundle
/opt/local/lib/libreadline.6.2.dylib

=== ruby-enterprise-1.8.7-2012.01 ========
/opt/ruby-enterprise-1.8.7-2012.01/lib/ruby/1.8/i686-darwin11.2.0/readline.bundle
/opt/local/lib/libreadline.6.2.dylib

person John Douthat    schedule 03.09.2011    source источник


Ответы (4)


Это проблема с терминалами Readline и UTF-8. Я не тратил время на то, чтобы отследить, откуда исходит реальная проблема, однако, если вы установите для $LANG какое-либо другое значение, проблема исчезнет.

Это не постоянное решение.

Еще одно быстрое решение — ввести дополнительный символ после вставки текста.

В качестве альтернативы вы можете вернуться к использованию библиотеки editline OSX, если вы перекомпилировали ruby, чтобы не использовать Readline. К сожалению, это связано со своими проблемами, такими как совместимость строки редактирования для потоков rubys readline block.

Я также должен отметить, что не только Ruby страдает от этой проблемы, я видел ее с другими реализациями readline в OSX, начиная со Snow Leopard.

person raggi    schedule 28.09.2011

может быть, установить чистый рубиновый readline?

person rogerdpack    schedule 10.02.2012

Похоже, что installer.rb REE добавляет флаги компоновщика -I/opt/local/include и -L/opt/local/lib -Wl,. После сброса этих флагов REE успешно компилируется без включения второй библиотеки readline, но результирующий ruby ​​не будет выполняться из-за других ошибок загрузки.

Решение состоит в том, чтобы временно удалить MacPorts при установке REE, чтобы он не связывался с дополнительной библиотекой readline.

  1. Закройте все процессы, которые обращаются к файлам MacPorts. Вы можете видеть, какие из них работают с sudo lsof | grep /opt/local.
  2. sudo mv /opt/local /opt/localbak
  3. Откройте новый терминал, затем скомпилируйте и установите REE.
  4. sudo mv /opt/localbak /opt/local

После этого установка REE будет правильно работать вместе с MacPorts.

Другие решения:

  • Удалите MacPorts навсегда и установите REE как обычно.
  • Используйте MRI или другую версию Ruby вместо REE

изменить: я заметил, что установка REE с ruby-build не не показывать эту проблему

person John Douthat    schedule 20.03.2012

Попробуйте добавить:

IRB.conf[:USE_MULTILINE] = false

В файл ~/.irbrc и перезапустить irb (или запустить load '~/.irbrc')

person BananaNeil    schedule 20.04.2021