2009-09-27 11 views
12

मैं चाहता हूँvim में मौजूदा बफर के ऑफसेट हो जाओ (विशेष रूप से, अजगर पटकथा के माध्यम से)

  1. वर्तमान कर्सर स्थिति की भरपाई करने के लिए
  2. वर्तमान चयन रेंज
vim में

, फ़ाइल की शुरुआत से शुरू। मैं इसे अजगर में करता हूं, इसलिए यह संकेत देता है कि विम की पायथन स्क्रिप्टिंग के साथ इसे कैसे करना बहुत उपयोगी होगा।

मैंने vim.current का उपयोग किया है .. स्क्रिप्टिंग करने से पहले, लेकिन यह सामान्य ऑफसेट की बजाय लाइनों और कॉलम का उपयोग करता है।

क्या मुझे पिछली पंक्ति लंबाई + वर्तमान पंक्ति की मात्रा की गणना करना होगा, या क्या कोई आसान तरीका है?

उत्तर

13

अपने vim +byte_offset विकल्प के साथ, हमेशा की तरह import vim के बाद Python स्क्रिप्ट में तो संकलित किया गया है, तो आप उपयोग कर सकते हैं, जैसे:

vim.eval('line2byte(line("."))+col(".")') 

बाइट कर्सर की स्थिति की फ़ाइल की शुरुआत से ऑफसेट करने के लिए , और इसी तरह अन्य अंकों के लिए। अधिक आम तौर पर, यदि आपके पास लाइन/कॉलम जोड़ी है (मानते हैं कि +byte_offset यह है कि आपका विम कैसे संकलित किया गया था) बाइट ऑफसेट प्राप्त करने का तरीका है (दूसरी तरफ जाने के लिए byte2line फ़ंक्शन भी है)।

vim मॉड्यूल vim में पाइथन स्क्रिप्ट के लिए सीधे उपलब्ध कार्यक्षमता का एक बहुत बनाने करता है, मैंने पाया कि vim.eval और vim.command अक्सर handiest (और कभी कभी केवल ;-) बस के रूप में गहरी के रूप में में प्राप्त करने के लिए जिस तरह से कर रहे हैं जरूरत है;-)। ओह, और जब भी मैं कर सकता हूं, मैं हमेशा एक vim संकलित करने की कोशिश करता हूं ;-)।

+0

धन्यवाद, यह बहुत उपयोगी है !! मुझे संदेह था कि वास्तविक एपीआई इसका समर्थन नहीं करता है :-) –

+3

या सीधे: 'echo eval (line2byte (line ("। ")) + Col ("। ")) ' – mykhal

11

आप statusline सेटिंग को भी देखना चाहते हैं। यह अलविदा statusline को ऑफसेट जोड़ देगा:

set statusline+=%o 

देखें :h statusline

बस सावधान रहना होगा क्योंकि डिफ़ॉल्ट statusline खाली है, और यह करने के लिए ओ% जोड़कर, आप सभी चूक ढीला।

+2

जब आप खोलते हैं तो स्थिति रेखा प्रदर्शित करने के लिए एक विंडो होती है: 'laststatus = 2' सेट करें – kizzx2

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