2012-08-24 15 views
5

मैं LearnVimscriptTHW से विस्क्रिप्ट को सीखने की कोशिश कर रहा हूं और मैं :execute and :normal के उपयोग में आया हूं।क्यों: निष्पादन विम में अपेक्षित काम नहीं कर रहा है: LearnVimscriptTheHardWay

Example from LVSTHW:

:normal! gg/a<cr> 

पुस्तक से: समस्या यह है कि normal!<cr> की तरह "विशेष वर्ण" को नहीं पहचानता है। इसके आस-पास कई तरीके हैं, लेकिन उपयोग करने और पढ़ने के लिए सबसे आसान execute है।

अब जब मैं :execute "normal! gg/a<cr>" का उपयोग करता हूं तो यह मेरे लिए काम नहीं करता है। यह मेरी वर्तमान फ़ाइल में a(char) की खोज नहीं करता है, इसके बजाय यह gg निष्पादित करता है और :execute "normal! gg/a\r" का उपयोग करने के अलावा कुछ भी नहीं करता है, यह काम करता है और मेरी फ़ाइल में char a सफलतापूर्वक हाइलाइट करता है।

मैंने निम्न तरीकों से भी कोशिश की लेकिन उनमें से कोई भी काम नहीं किया।

:execute "normal! gg/a"<cr> 
:execute normal! gg/a<cr> 
:execute "normal! gg/a<cr>"<cr> 
किताब से

ऐसा लगता है कि execute आंतरिक रूप से धर्मान्तरित <cr> to \r। तो, यह मेरे मामले में क्यों नहीं हो रहा है।

उत्तर

5

आपको बैकस्लेश साथ <cr> से बचने के लिए की जरूरत है: exe "norm! iHello\<cr>World"

+0

ठीक है यह काम करता है लेकिन मैं इस भ्रम में था कि 'निष्पादित' एसपी से बचने सहित सबकुछ संभालेगा। chars'। तो, क्या कोई भी विम फ़ंक्शन है जिसमें मैं अपना उपरोक्त आदेश लपेट सकता हूं ताकि वह उन वर्णों को संभाल सके जो स्वचालित रूप से बचने की आवश्यकता है। 'Exe' मानक की तरह कुछ! Escapefunc (iHello \ विश्व) ' – RanRag

+0

ठीक है, 'मानदंड' का उपयोग करते समय आपको विशेष पात्रों से बचना होगा क्योंकि अन्यथा vim नहीं जानता है कि आप' 'टाइप करना चाहते हैं या ' \ r'। 'मानक 'के बाहर यह स्वचालित रूप से काम करता है। – Conner

+0

हां,' बचें (" iHello \ विश्व ") का उपयोग करें या मेरे उत्तर में शाब्दिक नोटेशन का उपयोग करने की आदत में जाएं। – romainl

5

:help :execute पर एक नज़र यहाँ उपयोगी हो सकता है,। जब आप उन्हें अभिव्यक्ति में उपयोग करते हैं तो आपको किसी भी <CR> या <ESC> से बैकस्लैश के साथ भागना होगा: \<CR>, \<Esc> ... ये नोटेशन केवल मैपिंग में मान्य हैं, अगर मैं सही ढंग से समझता हूं।

एक अन्य विकल्प इनपुट करने के लिए कुंजी "का शाब्दिक अर्थ" है:

  • i डालने मोड में मिलता है, अनावश्यक अगर yoou कमांड लाइन पर हैं
  • <C-v>
  • <CR>

आप ^M जैसा दिखने वाला एक एकल पात्र प्राप्त होगा और इससे बचने की आवश्यकता नहीं है।

संबंधित मुद्दे