TextMate, bunu başarmak için rcodetools kullanıyor . Execute and Update komutunun paket editöründen '# =>' İşaretleyiciler :
"${TM_RUBY}" -r "${TM_SUPPORT_PATH}/lib/ruby1.9/add_1.8_features.rb" -- "$TM_BUNDLE_SUPPORT/vendor/rcodetools/bin/xmpfilter"
xmpfilter
rcodetools
gem ile birlikte gelir ve bağımsız çalıştırılabilir.
$ sudo gem install rcodetools
[...]
$ export RUBYLIB=/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/lib/ruby/user-gems/1.8/gems/rcodetools-0.8.5.0/lib/
$ echo "1+5 # => " | ruby /System/Library/Frameworks/Ruby.framework/Versions/Current/usr/lib/ruby/user-gems/1.8/gems/rcodetools-0.8.5.0/bin/xmpfilter
1+5 # => 6
Şimdi bu komutları Sublime Text 2 eklentisine eklemeniz, geçerli belgeyi girdi olarak geçmeniz ve çıktı ile değiştirmeniz yeterlidir. Bu cevapta Sublime Text 2 ile eklentilerin nasıl oluşturulacağı ve birleştirileceği hakkında genel bilgiler bulabilirsiniz .
Yukarıda gösterilen ortam için, bu soruna özel eklenti kodu:
import sublime, sublime_plugin, subprocess
class ExecuteAndUpdateRubyMarkers(sublime_plugin.TextCommand):
def run(self, edit):
r = sublime.Region(0, self.view.size())
text = self.view.substr(r)
s = subprocess.Popen(
[
'/usr/bin/env',
'RUBYLIB=/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/lib/ruby/user-gems/1.8/gems/rcodetools-0.8.5.0/lib',
'ruby',
'/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/lib/ruby/user-gems/1.8/gems/rcodetools-0.8.5.0/bin/xmpfilter'
],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
out = s.communicate(text)
if s.returncode != None and s.returncode != 0:
sublime.message_dialog("There was an error: " + out[1])
return
viewlines = self.view.lines(r)
outlines = out[0].split('\n')
for i in range(0, len(viewlines)):
self.view.replace(edit, viewlines[i], outlines[i])
Önce:
Sonra: