चलो देखते हैं। मेरे पास एक gvim
रनिंग है और मैं एक फाइल खोलना चाहता हूं, जो कि autocmd
एस ( जो नियम से बाहर हो--remote-tab
) का सम्मान करता है ।
अब मुझे पता है कि मैं (मूल रूप से, कुछ ट्वीक के साथ) कर सकता हूं:
gvim --remote-send ":tabe my_file<CR>"
जो काम करता है। लेकिन अगर किसी फ़ाइल में रिक्त स्थान या अजीब आकर्षण हैं, तो मुझे निम्नलिखित कार्य करने होंगे:
gvim --remote-send ":tabe my\\ file<CR>"
(डबल \\
इसलिए है क्योंकि उनमें से एक शेल द्वारा खाया जाता है; यह मैन्युअल प्रकार के बराबर है
`:tabe my\ file`
में vim
और यह काम करता है)। अब, मैं उस स्ट्रिंग को शेल में या जो भी बनाने का एक तरीका खोज सकता हूं, लेकिन मुझे उम्मीद है कि मैं "ग्लोबली" स्ट्रिंग को ": tabe" कमांड में पसंद कर सकता हूं, जैसे
gvim --remote-send ":tabe 'my file'<CR>"
या
gvim --remote-send ":tabe \"my file\"<CR>"
--- यह सीधे vim कमांड लाइन में लिखने के बराबर है :tabe "my file"
; ऐसा लगता है कि यह काम नहीं कर रहा है। मैं स्पष्ट रूप से शेल के साथ स्ट्रिंग में सभी जगह को उद्धृत कर सकता हूं, जैसे कुछ कर रहा हूं
# <ESC> because the gvim instance can be in a mode different from normal
# the double CR: do not ask.
# the argument MUST be a full path
file="$(readlink -f "$@")"
fileq="$(echo "$file" | awk '{gsub(/ /,"\\\ ")}1')" # quote spaces FIXME add other chars
exec gvim 2>/dev/null --servername $desktop --remote-send "<ESC>:tabe $fileq <CR><CR>"
लेकिन यह सिर्फ रिक्त स्थान के लिए काम करता है, न कि अन्य विशेष वर्ण जैसे टैब और "
(न ही नईलाइन्स, लेकिन यदि आपके पास आपके नाम के नाम में न्यूलाइन हैं!)।
सवाल :
स्वतंत्र रूप से विशेष रूप से खोल, जिसके साथ मैं :-) के बाद सौदा होगा पर, वहाँ एक रास्ता है जब सीधे टाइप vim में tabe:
विश्व स्तर पर करने के लिए लाइन "अजीब" वर्ण एक के बाद एक उद्धृत करने के लिए जा रहा बिना एक फ़ाइल नाम बोली?
gvim --remote-send ":tabe 'f s.txt'<CR>"
मेरे लिए काम नहीं कर रहा था, न ही लेखन :tabe 'f s.txt'
में, मुझे मिला E77: Too many files names
।
gvim --servername $desktop --remote-send "<ESC>:tabe ${file// /\\ }<CR>"
सरल नहीं होगा ?
shellescape
समारोह सहायक होगा?
:edit
(और इसके प्रकार) एक उद्धृत फ़ाइल नाम स्वीकार नहीं करता है। सभी विशेष पात्रों को व्यक्तिगत रूप से भाग जाने की आवश्यकता है। तो, :edit "foo bar.txt"
काम नहीं करेगा; आप की जरूरत :edit foo\ bar.txt
। उस ने कहा, :execute 'tabedit' escape('$file', ' ')
हो सकता है कि कुछ सही रास्ते पर हो।
gvim --remote-send ':tabe foo\ bar.txt<CR>'
मेरे लिए बैश और ज़श पर काम किया। और उद्धरण भी मायने रखते हैं। अगर मैं"
आंतरिक रूप से उपयोग करता हूं , तो यह काम नहीं किया, लेकिन'
किया:gvim --remote-send ":tabe 'foo bar.txt'<CR>"