Vi में उद्धरणों के बीच पाठ को कैसे बदलें


106

कहो कि मेरे पास यह पंक्ति है:

$query = "SELECT * FROM table";

क्या vi / vim में कोई कमांड है जो तुरंत उद्धरणों के बीच सबकुछ हटा सकता है और उन दोनों के बीच कर्सर रख सकता है ताकि मैं टाइप करना शुरू कर सकूं?

जवाबों:


182

उपयोग करें ci", जिसका अर्थ है: डबल कोट्स के अंदर क्या परिवर्तन करें।

आप इसी तरह से अन्य टेक्स्ट ऑब्जेक्ट्स में भी फेरबदल कर सकते हैं, जैसे:

  • ci' - सिंगल कोट्स के अंदर बदलाव
  • ciw - एक शब्द के अंदर परिवर्तन
  • ci( - कोष्ठक के अंदर परिवर्तन
  • dit - एक HTML टैग के अंदर हटाएं, आदि।

विभिन्न विम पाठ ऑब्जेक्ट्स के बारे में यहाँ और अधिक ।


2
लगता है केवल साथ काम कर रहा है vim, लेकिन नहीं vi। (पक्का नहीं)
इवान चाऊ

मेरे लिए यह केवल वर्तमान लाइन पर काम करता है, दस्तावेज़ में कहीं भी नहीं।
और अंत में 8

उसके बाद यह क्या आदेश करेगा? यदि आप कर्सर के पीछे के उद्धरणों के अंदर पाठ को बदलना चाहते हैं।
dtburgess

1
@ डर्टबर्गस: एक तरीका है F"ci"
यूजीन यर्मश

ci 'और ci "ठीक काम करता है, लेकिन ci (मेरे लिए काम नहीं करता है। कोई भी कोई भी विचार क्यों?
Vram Vardanian

24

आप उद्धरण चिह्नों और फिर ( d), परिवर्तन ( c) आदि का उपयोग करके चयन कर सकते हैं

vi"

इसी प्रकार, आप ब्रेसेस, ब्रैकेट्स, एक्सएमएल एलिमेंट्स इत्यादि को इस प्रकार से बदल सकते हैं:

vi(
vi{
vit

या बस परिवर्तन / हटाने के लिए, इसी करना di", ci"आदि स्थानापन्न aके लिए i(ताकि आप निशान या कोष्ठक बदल जाएगा आसपास के तत्वों को शामिल और उदाहरण के लिए, सामग्री)


5

मैंने एक प्लगइन बनाया है vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

यह किसी भी प्रकार के उद्धरणों के निकटतम जोड़े के लिए पाठ ऑब्जेक्ट प्रदान करता है और कई पंक्तियों में फैले उद्धरणों का समर्थन करता है। केवल iqया aqइसका उपयोग करने से आप सिंगल ('), डबल ("), या बैक (`) कोट्स पर काम कर सकते हैं, जो वर्तमान में कर्सर को घेरे हुए हैं, कर्सर के सामने हैं, या पीछे (वरीयता क्रम में) । दूसरे शब्दों में, यह उद्धरणों तक पहुंचने के लिए आवश्यक होने पर आगे या पीछे कूदता है।

उदाहरणों को देखकर समझना आसान है (कर्सर को साथ दिखाया गया है |):

  1. पहले: foo '1, |2, 3' bar; दबाने के बाद diq:foo '|' bar
  2. पहले: foo| '1, 2, 3' bar; दबाने के बाद diq:foo '|' bar
  3. पहले: foo '1, 2, 3' |bar; दबाने के बाद diq:foo '|' bar
  4. पहले: foo '1, |2, 3' bar; दबाने के बाद daq:foo | bar
  5. पहले: foo| '1, 2, 3' bar; दबाने के बाद daq:foo | bar
  6. पहले: foo '1, 2, 3' |bar; दबाने के बाद daq:foo | bar

ऊपर दिए गए उदाहरण एकल उद्धरणों के लिए दिए गए हैं, प्लगइन बिल्कुल डबल (") और पीछे (`) उद्धरणों के लिए उसी तरह काम करता है।

: आप किसी भी अन्य ऑपरेटरों का उपयोग कर सकते ciq, diq, yiq, viq, आदि

कृपया अधिक जानकारी के लिए ऊपर दिए गए github पृष्ठ पर एक नज़र डालें।


3

पहले से ही उद्धरण के अंदर से आप कर सकते हैं

di"

इसे "डिलीट इनसाइड" के रूप में पढ़ें


6
कर्सर को डबल-उद्धृत स्ट्रिंग के भीतर होने की आवश्यकता नहीं है, क्योंकि कमांड लाइन में इस तरह के पहले स्ट्रिंग को बदलने के लिए
चूकता है

1
धन्यवाद जो जानना बहुत अच्छा है! बस यह दिखाने के लिए जाता है कि मुझे चीजों को थोड़ा और ध्यान से पढ़ना चाहिए। :)
सैम शांति जू

3

ब्रायन के उत्तर के अतिरिक्त, आप नए मूल्य को p(पेस्ट) और y(यांक) भी कर सकते हैं , इसलिए यदि आप उद्धरण के अंदर मूल्य को दूसरे मूल्य से बदलना चाहते हैं, तो आप yi"उस चयन पर कर सकते हैं जिसे आप कॉपी करना चाहते हैं, vi"क्षेत्र का चयन करने के लिए जिसे आप बदलना चाहते हैं और उसके बाद बस pमूल्य को ठीक से बदलना चाहते हैं।


0

चुना हुआ उत्तर केवल वीआईएम के लिए उपयुक्त है, लेकिन वीआई के लिए नहीं। यह प्रश्न गलत भी है क्योंकि लेखक ने उल्लेख नहीं किया है कि कर्सर की प्रारंभिक स्थिति क्या है। यदि हम मानते हैं कि कर्सर दोहरे कोट्स के अंदर है तो vi के लिए उत्तर होगा:

T"ct"

कहाँ पे:

टी "- बस" चरित्र के बाद वापस चलते हैं

c - कमांड बदलें

t "- c कमांड के लिए अंतिम स्थिति प्रदान करते हैं, जहां इसे वर्णों को मिटाना बंद करना चाहिए, दूसरे शब्दों में रेंज बदलने के लिए

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