2011-01-20 36 views
7

Có khả năng nào trong VIM lặp lại "Thực thi và Cập nhật '# =>' Đánh dấu" tính năng TextMate cho mã ruby ​​hay không."Thực thi và Cập nhật '# =>' Đánh dấu" cho VIM

Tôi muốn có một cái gì đó như:

x = 2 
class A 
    def a 
    42 
    end 
end 

x # => 
A.new.a # => 

Nhập một số lệnh ... và nhận được

x = 2 
class A 
    def a 
    42 
    end 
end 

x # => 2 
A.new.a # => 42 

Đây là một mô tả về tính năng này từ Ciarán Walsh’s Blog:

Công cụ khác chắc chắn đáng biết là dấu "Thực thi và Cập nhật '# =>' ers "lệnh (trên ⌃⇧⌘E theo mặc định). Để sử dụng, hãy thêm một số điểm đánh dấu nhận xét (có một đoạn mã trên # ⇥ sẽ chèn chúng cho bạn) vào cuối dòng bạn muốn xem các kết quả và sau đó kích hoạt lệnh . TextMate sẽ chạy mã của bạn và báo cáo kết quả của dòng nội tuyến được đánh dấu trong các nhận xét. Tính năng này tuyệt vời cho mã được đăng trực tuyến vì nó hiển thị nguồn và kết quả với nhau.

Trả lời

1

Có vẻ như không quá khó để viết điều này dưới dạng hàm Vim. Hãy thử điều này:

function! ExecuteAndUpdate() 
    ruby << EOF 
     marker = '# =>' 
     buf = VIM::Buffer.current 
     lines = File.readlines(buf.name) 

     bnd = binding 
     eval(lines.join("\n"), bnd) 

     lines.each_with_index do |line, i| 
      if line.match(/#{marker}/) 
       result = marker + ' ' + eval(line, bnd).inspect 
       buf[i+1] = line.sub(/#{marker}.*/, result).chomp 
      end 
     end 
EOF 
endfunction 

Sau đó :call ExecuteAndUpdate().

Một giới hạn là nó đánh giá từng dòng có điểm đánh dấu hai lần. Vì vậy, các dòng với các điểm đánh dấu không nên có tác dụng phụ.

+0

Vâng, đó sẽ là một hạn chế khác mà tôi đoán. –

Các vấn đề liên quan