إرسال إدخال إلى نافذة الشاشة من VIM
-
29-09-2019 - |
سؤال
لديّ وظيفة VIM إعداد حيث يمكنني تسليط الضوء على سطر النص والتنفيذ في Clojure. ها هي الوظيفة:
function! Clojure_execline()
let cl = (getline(line(".")))
// ...
exec 'clojure -e "' . cl . '"'
endfunction
المشكلة في ذلك هي أنه من البطيء البدء ولأنه يولد جلسة جديدة في كل مرة أقوم فيها بتشغيلها ، لا يمكنني استدعاء وظيفة قمت بتشغيلها مسبقًا. من الناحية المثالية ، أود أن يتم تشغيل Repling Hidden حيث يمكنني إرسال مدخلات من VIM واسترداد الإخراج من كذلك. لقد تعلمت عن شاشة GNU واعتقدت أنها يمكن أن تساعدني ، لكنني لا أعرف كيفية إرسال المدخلات من نافذة شاشة إلى أخرى.
لتوضيح مشكلتي ، خذ هذا الخط من clojure:
(defn add2 [x y] (+ x y))
أود أن أكون قادرًا على تسليط الضوء على هذا الخط في VIM والتنفيذ في REPLE REPLE. أريد أن أكون قادرًا على استدعاء السطر أدناه وجعله ينفذ في نفس الاستبدال:
(add2 4 5)
بعد ذلك ، أود أن أكون قادرًا على الحصول على إخراج الوظيفة.
لذا ، في الأساس ، سؤالي هو ، كيف يمكنني إرسال إدخال من نافذة شاشة إلى أخرى؟
المحلول 3
وجدت ما كنت أبحث عنه. يمكنك تنفيذ هذا من محطة لإرسال سلسلة مباشرة إلى stdin من نافذة الشاشة:
$ screen -X stuff "ls -l\015" # \015 sends a carrige return.
نصائح أخرى
اقتراح جيك ماكراري اقتراح جيد. هناك أيضًا بعض البرامج النصية الأخرى المتاحة ، ربما تستند إلى نفس الفكرة:
vimclojure, ، الذي يقول إنه "استبدال في عازلة VIM"
و
slimv, ، يدعم على وجه التحديد clojure
و
غوريلا, ، أعتقد أن vimclojure ، أعلاه ، يعتمد على الغوريلا
لا أعرف ما إذا كان vimclojure يقوم بالفعل بما تريد ، وإرسال النتيجة مرة أخرى من الشاشة إلى المخزن المؤقت في VIM. طريقة واحدة للقيام بذلك ، على ما أعتقد ، ستكون Finagle شيء باستخدام وظيفة خادم عميل VIM ، ممكن مع-العلم--send. نرى:
:h client-server
:h --remote-send
ليس لدي إجابة دقيقة ، ولكن قد يكون من المفيد إلقاء نظرة على الوحل.
قد تكون مهتمًا أيضًا بـ Conque http://code.google.com/p/conque/
أنا أستخدمه لسكالا