पाठ वस्तुओं के रूप में आयताकार क्षेत्र?


11

क्या किसी पाठ वस्तु को व्यर्थ में परिभाषित करना संभव है जो एक आयताकार क्षेत्र पर कार्य करेगा?

उदाहरण के लिए, मान लें कि मेरे पास पाठ के लंबवत संरेखित स्तंभ हैं, जैसे:

column 1 co    column 2 col
lumn 1 colu    umn 2 column
mn 1 column    2 column 2 c
1 column 1     olumn 2 colu

क्या cस्तंभों के लिए एक पाठ्यपुस्तक को परिभाषित करना संभव होगा , जैसे कि dacवह एक कॉलम को हटा yacदेगा , इसे यैंक कर देगा, cacइसे बदल देगा, और इसी तरह?

(मैं एक आयताकार क्षेत्र के चयन के लिए Control-V और के बारे में पता है, और मुझे पता है तुम तो उपयोग कर सकते हैं d, y, आदि को हटाने के लिए, झटका आदि चयनित क्षेत्र। लेकिन मैं क्या पाठ वस्तुओं का उपयोग कर सकता है के बारे में विशेष रूप से उत्सुक हूँ।)


6
क्या यह संभव है? पूर्ण रूप से! केस एंड पॉइंट: टेक्स्टोबज-वर्ड-कॉलम.विम
पीटर रिंकेर

@PeterRincker यह अच्छा है, लेकिन मुझे आश्चर्य है कि अगर काना के textobj- उपयोगकर्ता का लाभ उठाने के लिए इसे सरल नहीं किया जा सकता है ।
lcd047

धन्यवाद, पीटर, यह बिल्कुल उसी तरह का उदाहरण है जिसकी मुझे तलाश थी।
लेह वेलेमैन 3

2
@PeterRincker ने इसका उत्तर दिया :)
Vitor

जवाबों:


5

हां, यह संभव है। @PeterRincker प्लगइन का सुझाव textobj-शब्द-स्तंभ , जो चार पाठ वस्तुओं (परिभाषित करता है ic, ac, iC, और aCशब्द के आधार पर स्तंभों के लिए)।

इस कार्यक्षमता के पीछे का विचार एक फ़ंक्शन बनाने के लिए है जो स्तंभ आधारित गति को परिभाषित करता है, और फिर इस फ़ंक्शन को दृश्य / चयन मोड मैपिंग और ऑपरेटर लंबित मैपिंग के लिए उचित रूप से मैप करने के लिए है। एक उदाहरण के रूप में उपर्युक्त प्लगइन का उपयोग करने के लिए, यह निम्नलिखित मैपिंग बनाता है:

xnoremap <silent> ac :<C-u>call TextObjWordBasedColumn("aw")<cr>
xnoremap <silent> aC :<C-u>call TextObjWordBasedColumn("aW")<cr>
xnoremap <silent> ic :<C-u>call TextObjWordBasedColumn("iw")<cr>
xnoremap <silent> iC :<C-u>call TextObjWordBasedColumn("iW")<cr>
onoremap <silent> ac :call TextObjWordBasedColumn("aw")<cr>
onoremap <silent> aC :call TextObjWordBasedColumn("aW")<cr>
onoremap <silent> ic :call TextObjWordBasedColumn("iw")<cr>
onoremap <silent> iC :call TextObjWordBasedColumn("iW")<cr>

यहाँ TextObjWordBasedColumn(...)कॉलम गति को परिभाषित किया गया है और दृश्य / चयन मोड के साथ xnoremapऔर ऑपरेटर के साथ लंबित मोड में मैप किया गया है onoremap। ध्यान दें कि इंडेंडेशन को संभालने और उचित गति सीमाओं को खोजने के लिए फ़ंक्शन थोड़ा जटिल है।


4

क्या यह संभव है? पूर्ण रूप से! केस एंड पॉइंट: टेक्स्टोबज-वर्ड-कॉलम.विम

कैसे अपनी खुद की पाठ वस्तुओं बनाने के लिए

आमतौर पर एक नया टेक्स्ट ऑब्जेक्ट बनाने के लिए विज़ुअल मोड का उपयोग किया जाता है। दृश्य मोड लाइन-वार, वर्ण-वार (आमतौर पर), या दृश्य-ब्लॉक हो सकता है। यहाँ मूल बातें है कि आप की आवश्यकता होगी:

  • एक अप्रयुक्त कुंजी संयोजन आमतौर पर a{char}या i{char}जहां {char}वर्णनात्मक और अप्रयुक्त दोनों है। उदाहरण के i/रूप में उदाहरण के बीच पाठ वस्तु है /
  • अपने टेक्स्ट-ऑब्जेक्ट की शुरुआत खोजने के लिए एक तरीका चाहिए। जैसेT/
  • अपने टेक्स्ट-ऑब्जेक्ट के अंत का पता लगाने के लिए एक तरीका चाहिए। जैसेt/
  • एक दृश्य मोड चुनें। जैसेv
  • के माध्यम से एक दृश्य मोड (केवल) मानचित्रण बनाएँ xnoremap
  • एक लंबित मोड मैपिंग ऑपरेटर बनाएँ जो विज़ुअल मोड मैपिंग का उपयोग करता है onoremapऔर :normal

अब हमारे सरल के एक उदाहरण के लिए i/जो एक पाठ-वस्तु बनाता है /:

xnoremap i/ :<c-u>normal! T/vt/<cr>
onoremap i/ :normal vi/<cr>

जब तक आप मूल अवयवों का पालन करते हैं तब तक आप सभी प्रकार की चीजों के लिए टेक्स्ट-ऑब्जेक्ट बना सकते हैं।

Vim-textobj-user के साथ उन्नत टेक्स्ट-ऑब्जेक्ट निर्माण

Vim-textobj-उपयोगकर्ता प्लगइन एक आम तरीका है एक और अधिक कथात्मक फैशन में कस्टम पाठ-वस्तुओं को परिभाषित करने देता है। उदाहरण के लिए यहाँ php टैग टेक्स्ट-ऑब्जेक्ट है:

call textobj#user#plugin('php', {
\   'code': {
\     'pattern': ['<?php\>', '?>'],
\     'select-a': 'aP',
\     'select-i': 'iP',
\   },
\ })

Vim-textobj-उपयोगकर्ता अधिक सहायता के लिए अपने सहायता दस्तावेज़ देखें: :h textobj-user-introduction

अधिक सहायता के लिए

:h map-overview
:h visual-start
:h :norm

साथ ही साथ नई टेक्स्ट ऑब्जेक्ट बनाना Vim wiki पेज।

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