2011-12-14 53 views
6

Tôi muốn xây dựng một giao diện trong Javascript nơi tôi thu thập các lần nhấn phím và gửi chúng đến một cá thể vim từ xa và có báo cáo cá thể quay lại bất kỳ thay đổi nào. Tôi khá tự tin tôi có thể thực hiện tất cả các giao tiếp trình duyệt-máy chủ và javascript --- Tôi chỉ không chắc chắn làm thế nào để vượt qua các dữ liệu để vim và làm thế nào để có nó nói chuyện lại với tôi.Gửi lệnh đến vim theo chương trình

Mọi con trỏ sẽ được đánh giá cao! Cảm ơn

Chỉnh sửa: Triển khai ban đầu có thể được tìm thấy trên Github.

+2

Không bao giờ thử nó, nhưng nếu bạn biên dịch vim với ['+ clientserver' support] (http://vimdoc.sourceforge.net/htmldoc/remote.html) nó có thể chạy trong chế độ máy khách-máy chủ. Xem [bài đăng trên blog này] (http://ajayfromiiit.wordpress.com/2009/10/21/server-and-client-mode-in-vim/) để biết ví dụ đơn giản. –

Trả lời

18

Hãy xem TextAid (cụ thể là máy chủ Perl). Có thể bạn sẽ tìm thấy những ý tưởng hữu ích.

--RE-EDIT--

Vì tôi thích ý tưởng của bạn tôi đã xem xét một chút nữa.

Giả Vim được biên soạn với +clientserver, bạn có thể khởi chạy vim như thế này:

$ vim --servername MYSERVER /path/to/tempfile` 

trên hộp điều khiển từ xa. Vim được khởi động trong chế độ máy chủ và bạn có thể gửi nó ra lệnh như:

$ vim --servername MYSERVER --remote-send 'ihello<Esc>' 

phải có:

hello 

trên dòng đầu tiên, nếu bạn gửi:

$ vim --servername MYSERVER --remote-send 'A world<Esc>' 

bạn có được:

hello world 

Nếu bạn gửi:

$ vim --servername MYSERVER --remote-send 'yy5p' 

bạn có được:

hello world 
hello world 
hello world 
hello world 
hello world 

Nếu bạn gửi:

$ vim --servername MYSERVER --remote-send ':%s/hello/goodbye cruel<CR>' 

bạn có được:

goodbye cruel world 
goodbye cruel world 
goodbye cruel world 
goodbye cruel world 
goodbye cruel world 

đó là loại mát mẻ nhưng bạn cần phải gửi lại trạng thái mới của bộ đệm mà bạn sẽ làm bằng writin g tệp tạm thời và gửi nội dung của nó trở lại máy khách sau mỗi mỗi lệnh. Điều đó có nghĩa là rất nhiều đọc/ghi trên máy chủ của bạn. Người ta cũng có thể viết một macro gửi nội dung của bộ đệm tới một số tiến trình bên ngoài trên mỗi "thay đổi".

--EDIT--

Nếu bạn đã theo các liên kết thay vì gạt bỏ câu trả lời của tôi bạn sẽ thấy rằng phần mở rộng trên công trình bằng cách gửi nội dung của textarea đến máy chủ Perl qua HTTP.

Tôi không nghĩ rằng nó quan trọng nếu Vim là cục bộ hoặc trên một máy chủ ở xa.

Máy chủ ghi nó vào một tệp tạm thời sau đó được mở bằng Vim.

Khi Vim ghi tệp, nội dung của tệp đó sau đó được máy chủ gửi lại cho tiện ích.

Đoạn JS của bạn sẽ làm những gì mà tiện ích mở rộng thực hiện: lấy nội dung của vùng văn bản, gửi qua yêu cầu POST của AJAX tới máy chủ của bạn, chờ câu trả lời và cập nhật nội dung của vùng văn bản.

Thực ra, tôi nghĩ rằng bạn thậm chí có thể sử dụng tập lệnh ở trên. Hoặc ít nhất hãy coi đó là điểm khởi đầu cho ứng dụng của riêng bạn.

+0

Tôi muốn xây dựng trình chỉnh sửa vim trên đám mây chứ không phải tiện ích máy cục bộ. Cảm ơn –

+0

Vui lòng cập nhật câu hỏi của bạn. Không có gì trong đó nói rằng bạn muốn xây dựng một đám mây Vim. Một đám mây Vim là gì? – romainl

+0

Tại sao một người nào đó đã downvoted câu trả lời này? Mah .. – lucapette

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