[英]Pasting text into IRB is incredibly slow. Readline issue?
當我將以下文本粘貼到在 ruby-enterprise-2011.03 下運行的 IRB 或 PRY 時,需要 13 秒。
# Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
在同一台計算機上運行帶有其他 ruby 安裝的 irb 時,粘貼並不慢。
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 以忽略來自 MacPorts 的 libreadline 文件?
require 'readline'
puts `lsof -p #{$$} | grep -i readline | awk '{print $9}'`
puts
我在幾個 ruby 安裝上運行了上面的腳本。 只有底部的 2 個安裝(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
這是 Readline 和 UTF-8 終端的問題。 我沒有花時間去追蹤真正的問題來自哪里,但是,如果您將 $LANG 設置為其他值,問題就會消失。
這不是一個永久的解決方案。
另一個快速解決方法是在粘貼文本后鍵入一個附加字符。
如果您重新編譯 ruby 以不使用 Readline,您也可以返回使用 OSX 的編輯行庫。 可悲的是,這帶來了它自己的問題,例如 rubys readline 塊線程的編輯行兼容性。
我還應該注意,不僅僅是 ruby 遇到這個問題,自從 Snow Leopard 以來,我已經在 OSX 上的其他 readline 實現中看到了它。
嘗試添加:
IRB.conf[:USE_MULTILINE] = false
到您的~/.irbrc
文件,然后重新啟動 irb(或運行load '~/.irbrc'
)
也許安裝純ruby readline?
看起來 REE 的installer.rb
添加了-I/opt/local/include
和-L/opt/local/lib -Wl,
鏈接器標志。 清除這些標志后,REE 在不包含第二個 readline 庫的情況下成功編譯,但由於其他加載錯誤,生成的 ruby 將不會執行。
一個解決方案是在安裝 REE 時暫時刪除 MacPorts,這樣它就不會鏈接到額外的 readline 庫。
sudo lsof | grep /opt/local
查看哪些正在運行sudo lsof | grep /opt/local
sudo lsof | grep /opt/local
。sudo mv /opt/local /opt/localbak
sudo mv /opt/localbak /opt/local
之后,REE 安裝將與 MacPorts 一起正常工作。
其他解決方案:
編輯:我注意到用ruby-build安裝 REE 沒有出現這個問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.