支援
RVM 由志工社群維護,請將問題回報給 RVM 問題追蹤器。
如果您能提供協助或希望成為維護人員之一,請立即開始協助。您可以在 RVM Github 組織 找到更多與 RVM 相關的專案。
贊助者
Carbon Ads

TextMate

可以使用 TM_RUBY 環境變數在 TextMate 中支援 RVM gemsets。目前,RVM 有兩個可能的現成設定檔 - 一個是 rvm-auto-ruby,它支援根據 .rvmrc 自動偵測 ruby(如果可能的話),另一個則使用 RVM 內建的包裝器功能為固定的 ruby 版本產生二進位檔。

對這兩個來說,首先保持最新狀態很重要 - 在最近的版本中,您可以使用下列指令執行此動作

rvm get head

您也應該選擇一個預設的 Ruby,例如將 1.9.2 設定為您的預設

rvm --default use 1.9.2

rvm-auto-ruby 方法

rvm 預設會附帶一個 ruby 二進位檔,通常位於 ~/.rvm/bin(或在系統範圍的安裝中,位於 /usr/local/bin 內),它會在執行 ruby 之前執行下列步驟

  1. 載入 RVM
  2. 尋找任何 RVMRC 檔案並載入它們
  3. 以正常的 ruby 執行

此方法讓您可以在每個專案的基礎上切換 ruby,而無需任何額外的作業。安裝 rvm 後,這只需取得 rvm-auto-ruby 的完整路徑,方法如下

which rvm-auto-ruby

在 textmate 偏好的進階區段中,新增或變更 TM_RUBY 變數以指向給定的路徑,如 此螢幕截圖 中所示,其中包含範例安裝。

RVM 包裝器方法

如果您希望您的 TextMate 安裝始終使用單一的 ruby 和 gemset 組合,您需要改用 rvm 包裝器方法。這會產生一個 ruby 二進位檔,TextMate 可以使用它。要使用此方法,請先決定您希望使用的 ruby 和 gemset 組合。在我們的範例中,我們將使用

rbx@rails3
(任何可以由 rvm 使用的解析,例如 ree、1.8.7、1.9.2@ninja-attack,都可以使用包裝器指令)。

接下來,你需要產生一個指令。rvm wrapper 指令的一般結構為

rvm wrapper [ruby_string] [wrapper_prefix]

在我們的案例中,因此我們執行

rvm wrapper rbx@rails3 textmate

這個指令會在你的 rvm bin 路徑中建立一個檔案(如前面所述),稱為

textmate_ruby
我們可以用來作為 TM_RUBY 的值。因此,開啟 TextMate 並前往 textmate 偏好的進階面板,新增或變更 TM_RUBY 變數為執行
which textmate_ruby
在指令列上的輸出(例如 /Users/wayne/.rvm/textmate_ruby)。

現在關閉 textmate 並重新開啟它,讓套件和 TM_RUBY 設定生效。

測試你的 wrapper

現在你可以透過以下步驟測試它是否運作

  1. 開啟一個新文件
  2. 將這個程式碼放入新文件中
    puts RUBY_DESCRIPTION
    
  3. 將檔案儲存為 'ruby_test.rb'
  4. 按下 Command + R 執行 ruby
如果你看到類似「ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin10.2.0]」,最重要的是「ruby 1.9.1」的部分,那麼它就如預期般運作。

當你希望切換 textmate 預設使用的 ruby 版本時,你可以依照下列方式變更你的預設 RVM ruby 版本

$ rvm use rbx@rails3 --default
RVM 也會根據每個專案的 .rvmrc 檔案切換 ruby 版本和 gemset

自動化 wrapper 指令

如果你希望 TextMate 的 Ruby 在每次 rvm 變更目前的 Ruby 時切換,那麼你可以透過讓腳本檔案可執行,在 rvm 的 hooks 目錄中啟用「after_use_textmate」hook

$ cd ~/.rvm/hooks
$ chmod +x after_use_textmate

現在,當你切換到一個專案目錄,且 rvm 自動切換 Ruby 時,TextMate 會準備好使用目前的二進位檔執行。只要注意切換到非你正在進行的主要專案的專案目錄的副作用,因為 TextMate 的 Ruby 環境會相應地變更!

確保 TextMate 是最新的

接下來,讓你的 textmate 是最新版本,並執行以下腳本更新你所有的套件

#!/usr/bin/env bash

mkdir -p /Library/Application\ Support/TextMate/

sudo chown -R $(whoami) /Library/Application\ Support/TextMate

cd /Library/Application\ Support/TextMate/

if [[ -d Bundles/.svn ]] ; then
  cd Bundles && svn up
else
  if [[ -d Bundles ]] ; then
    mv Bundles Bundles.old
  fi
  svn co http://svn.textmate.org/trunk/Bundles
fi

exit 0

備註

若要變更 TM_RUBY shell 變數,在 TextMate 中使用選單導覽至

Textmate | Preferences | Advanced | Shell Variables

如果你遇到問題,你可能需要在 TextMate 中變更 bundler Builder.rb。由於 TextMate 會使用它自己的 builder,因此透過移除它,我們可以使用如上所述的 TM_RUBY(感謝 Seivan Heidari!)

cd /Applications/TextMate.app/Contents/SharedSupport/Support/lib/ ; mv Builder.rb Builder.rb.backup

如果你需要更新 osx-plist 以相容 Ruby 1.9.X,這可能會有些用處

git clone git://github.com/kballard/osx-plist.git
cd osx-plist/ext/plist
ruby extconf.rb && make
cp plist.bundle /Applications/TextMate.app/Contents/SharedSupport/Support/lib/osx/

如果您遇到 Ruby 1.9+ 的問題,即

  ruby:0:in `require': /Users/someuserhere/Library/Application Support/TextMate/Bundles/Ruby.tmbundle/Support/RubyMate/catch_exception.rb:13: invalid multibyte char (US-ASCII) (SyntaxError)

您需要檢查套件的更新版本,或手動編輯有問題的文件,在文件開頭加入以下內容

# encoding: utf-8

這會強制 Ruby 以正確的文字編碼讀取文件,允許多位元組字元。另一種解決方案是讓 ruby 1.9.X 在透過 textmate_ruby 呼叫時,始終以 UTF-8 模式執行。為此,請編輯 textmate_ruby 文件並取代包含以下內容的行

exec ruby "$@"

使用包含以下內容的新行

exec ruby -wKU "$@"

其他

您可以建立一個 shell 函數,以開啟排除檔案的專案目錄。以下是這個概念的簡單範例

上述函數程式碼(減去第一行)會放在您的 dotfiles 或 ~/.bash_profile 中,如果您沒有維護 dotfiles 的話。