विम में चयन कैसे पलटना है?


12

Vकमांड के साथ लाइनों की एक श्रृंखला का चयन करने के बाद , मैं उस फ़ाइल की प्रत्येक पंक्ति को हटाना चाहूंगा जो चयनित नहीं है, इसलिए चयन को पलटने का एक तरीका है - प्रत्येक पंक्ति का चयन करें जो चयनित नहीं है?

जैसे की

:g!/FOO/d

हर पंक्ति को हटाता है जिसमें FOO नहीं है ।

अगर मेरे मन में एक सीमा थी और मैं इसका उलटा इस्तेमाल करना चाहता था:

'a,'b

मुझे दो श्रेणियों का उपयोग करने की आवश्यकता होगी:

1,'a-1

तथा

'b+1,$

मुझे संदेह है कि यह एक कदम में नहीं किया जा सकता है - लेकिन यह अच्छा होगा!


तो आप एक "फसल" -स्टाइल ऑपरेशन चाहते हैं?
क्वैक क्विक्सोट

जवाबों:


7

पहले निम्नलिखित मानचित्रण बनाएं (उदाहरण के लिए <F4>कुंजी से बंधा हुआ )

map <F4> :<C-U>1,'<-1:delete<CR>:'>+1,$:delete<CR>

फिर, दृश्य मोड में एक सीमा का चयन करने के बाद, <F4>संबंधित कमांड को ट्रिगर करने के लिए बस दबाएं । कमांड को भागों में आसानी से समझाया जा सकता है:

  • " :" कमांड लाइन मोड दर्ज करें।
  • " <C-U>" कर्सर की स्थिति और लाइन की शुरुआत के बीच के सभी पात्रों को हटा दें।
  • " 1,'<-1" विशेष रूप से वर्तमान चयन की शुरुआत से पहले फ़ाइल की पहली पंक्ति से लाइन तक की सीमा।
  • " :delete<CR>" हटाएं (लाइनों की पूर्व निर्दिष्ट सीमा)।
  • " :'>+1,$:delete<CR>" '>+1,$चयन की समाप्ति के बाद लाइन से फ़ाइल के अंत तक, "श्रेणी में लाइनें हटाएं" ।

2
बस इसे समझाने के लिए: 1, '<- 1 चयन की शुरुआत तक लाइन 1 से रेंज है। '> + 1, $ 1 पंक्ति से लेकर अंत तक चयन के बाद की सीमा है ...
अकीरा

क्या ऐसा करने का कोई तरीका है जो केवल एक "डिलीट" कमांड के साथ हो?
केविन पेंको

1
@ केविन पैंको: आपको श्रेणियों को एक एकल अभिव्यक्ति में संयोजित करने की आवश्यकता होगी। मैंने डॉक्स को देखा है और मुझे नहीं लगता कि रेंज सिंटैक्स इस तरह का समर्थन करता है। vimdoc.sourceforge.net/htmldoc/cmdline.html#cmdline-ranges ,,, vim.wikia.com/wiki/Ranges
quix quixote

15
  1. अपना पाठ चुनें
  2. "*yggdG"*p जिसका मतलब है ...

    "*y    " yank it to the selection register
    ggdG   " delete everything
    "*p    " and paste the selection again 
    

9
ygg "_dGP समान है, लेकिन कम है।
केविन

1
अंत में आपको एक ही पाठ मिलता है, सही :)
अकीरा

मैं सिर्फ अकीरा और केविन पैंको जवाबों का उल्लेख करना चाहूंगा (मैं टिप्पणी नहीं जोड़ सकता)। "o] pposite [d] elete in (v) isual मोड vmap od ygg" _dGP
Marcin Rogacki

Github.com/maxbrunsfeld/vim-yankstack जैसे प्लगइन्स इस दृष्टिकोण को आसान बनाते हैं। आपको अपने यैंक रजिस्टर को हटाए जाने के बारे में ज्यादा चिंता करने की जरूरत नहीं है।
जैक ओ'कॉनर

इसे कीबोर्ड मैपिंग के रूप में कैसे जोड़ा जा सकता है .vimrc? मैंने कुछ प्रयास किए हैं, लेकिन अभी तक इसे प्राप्त नहीं किया है। मेरे प्रयास थे map <F4> n"*yggdG"*p औरnmap <F4> "*yggdG"*p
ब्रैड पार्क 13

7

बस पद के लिए:

:v/\%V/d

यह उन लाइनों पर एक व्युत्क्रम वैश्विक करता है जो चयन का हिस्सा नहीं हैं। ध्यान दें: v एक लाइन-आधारित निर्माण है, इसलिए किसी भी लाइन जिसमें कोई भी चयन हो, वह लाइन हो, स्ट्रीम हो, या ब्लॉक का चयन विलोपन हो।


1

चूँकि 'इनवर्टिंग' का अर्थ मूल रूप से 'बहुविकल्पी' (मूल चयन से पहले और बाद का क्षेत्र) बनाने के लिए है, इसलिए मैंने फिर से http://www.vim.org/scripts/script.php?script_id=953 पर खोजे । इसे इस्तेमाल करे।

 There are a number of operations to very
 easily manipulate selections such as modifying 
 the regions (add/delete/inverte/clear), hiding, 
 refreshing, saving and restoring etc."
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.