प्रत्येक पंक्ति के लिए पायथन कथन को कैसे निष्पादित करें?


11

मेरे पास निम्न नमूना कोड है जो पायथन स्टेटमेंट का उपयोग करके वर्तमान लाइन को संशोधित करता है:

:py import vim; vim.current.line="["+vim.current.line+"]"

मैं वर्तमान फ़ाइल में प्रत्येक पंक्ति के लिए इस कथन को कैसे निष्पादित कर सकता हूं?

संबंधित: आप विम में पायथन का उपयोग कैसे कर सकते हैं? स्टैकओवरफ्लो पर

जवाबों:


10

आप pydoVim 7.4 से उपलब्ध कमांड का उपयोग कर सकते हैं , मैनुअल वर्णन करता है कि यह मेरे से बेहतर काम कैसे कर सकता है:

: [श्रेणी] पीडो {शरीर}

पायथन फ़ंक्शन को "डिव्व__पीडो (लाइन, लाइनन्र): {बॉडी}" को [रेंज] में प्रत्येक लाइन के लिए फंक्शन की दलील के साथ, फंक्शन की दलीलों के साथ प्रत्येक लाइन के टेक्स्ट में सेट किया जाता है, बिना ट्रैस <EOL>, और करंट के। रेखा संख्या। फ़ंक्शन को एक स्ट्रिंग या कोई भी नहीं लौटना चाहिए। यदि एक स्ट्रिंग लौटा दी जाती है, तो यह वर्तमान मोड़ में लाइन का पाठ बन जाती है। [श्रेणी] के लिए डिफ़ॉल्ट पूरी फ़ाइल है: "1, $"।

अपने उदाहरण के लिए आप एक कमांड का उपयोग कर सकते हैं जैसे:

:python import vim
:pydo vim.current.buffer[linenr - 1] = '[%s]' % line

linenr - 1बिट है क्योंकि में लाइनों vim.current.buffer0 अनुक्रमित रहे हैं, लेकिन विम 1 से लाइनों गिनती करने के लिए शुरू करते हैं।

अच्छी बात यह है कि आप अपने पायथन कोड को कई लाइनों पर निष्पादित करने के लिए आसानी से एक कस्टम कमांड को परिभाषित कर सकते हैं:

command! -range=% BracketLines 
    \ <line1>,<line2>pydo vim.current.buffer[linenr - 1] = '[%s]' % line

1
यह available.४ के बाद से उपलब्ध है।
kenorb

7

आप वर्तमान बफ़र को प्राप्त कर सकते हैं vim.current.buffer, जो एक पुनरावृत्त है; आप forप्रत्येक पंक्ति को प्राप्त करने के लिए एक लूप का उपयोग कर सकते हैं ।

आप उन्हें असाइन करके लाइनें बदल सकते हैं; इसलिए इसे एक साथ रखना, हमें मिलता है:

:py from vim import *
:py for i, line in enumerate(current.buffer): current.buffer[i] = '[%s]' % line

यह भी देखें :help python-buffer

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.