मुझे एक फ़ाइल की सामग्री को देखने की समस्या थी, फ़ाइल को बाहरी रूप से अपडेट करें, परिवर्तित फ़ाइल को प्रदर्शित करें और जब आवश्यक हो, इसे संपादित करने का विकल्प हो। मैंने इसे इस उत्तर से प्रेरित विम सर्वर / रिमोट कमांड लाइन विकल्पों के साथ हल किया ।
निम्न आदेशों के साथ एक फ़ाइल को एक बाहरी कमांड के माध्यम से पुनः लोड किया जा सकता है। सबसे पहले, सर्वर इंस्टेंस शुरू करते समय विम के साथ प्रश्न में फाइल खोलें।
vim --servername JABBERWOCKY /tmp/alice.log
मान लें कि फ़ाइल को बाहरी रूप से बदल दिया गया है, उदाहरण के लिए a echo "Curiouser and curiouser" >> /tmp/alice.log
। जब आवश्यक हो, फ़ाइल को फिर से लोड करने के लिए सर्वर उदाहरण के लिए एक कमांड भेजें। यह आदेश शीघ्रता से समाप्त होगा और एक नया संपादक नहीं होगा।
vim --servername JABBERWOCKY --remote-send ":e<CR>"
यदि खोली गई फ़ाइल विम में और बाहरी रूप से बदल दी गई थी, तो पुनः लोड करने के दौरान एक संघर्ष होगा (एक चेतावनी संदेश दिखाई देगा)। उस स्थिति के लिए एक निर्णय लिया जाना चाहिए: इसे उसके साथ छोड़ दें और विम में परिवर्तन रखें, या स्थानीय परिवर्तनों को त्यागें और पुनः लोड करने के लिए मजबूर करें ।
--remote-send
ऊपर दिए गए कमांड को मैनुअल रीलोडिंग की आवश्यकता है। हालाँकि, उस आदेश को एक साधारण लूप से बांधा जा सकता है, बश के for
/ while
का उपयोग करके, या लिनक्स के यूनिक में एक-एक लाइनर का उपयोग करके:
watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'
यद्यपि परीक्षण नहीं किया गया है, लेकिन मुझे यकीन है कि ऐसा कुछ PowerShell में भी महसूस किया जा सकता है।
लिनक्स / यूनिक्स पर ईवेंट-संचालित दृष्टिकोण को महसूस किया जा सकता है , उदाहरण के लिए फ़ाइल सिस्टम ईवेंट्स का उपयोग करके लाइब्रेरी को inotify करें , यदि आपका बहुत क्रेज़ी फाइल सिस्टम उपयोग नहीं कर रहा है। व्यक्तिगत तौर पर मैं उपकरण का उपयोग कर की तरह entr एक बहुत है, जो प्रमुख लिनक्स वितरण में शामिल किया जा रहा है। फिर मुझे मिलता है:
echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>