2013-04-05 7 views
6

को छोड़कर लाइन पर सभी शब्दों को हटाएं मुझे पिछले एक को छोड़कर लाइन पर सभी शब्दों को हटाने के लिए एक विम खोजने/प्रतिस्थापन के साथ आने में परेशानी हो रही है, यानी कुछ एसक्यूएल में, यह उत्पन्न करना अच्छा होगा कोड का एक समूह से सभी उपनामों की एक सूचीvim: अंतिम

select 
column_a alias_a, 
column_b alias_b, 
column_c alias_c 

from 
... 

मैं सिर्फ सूची

alias_a, alias_b, alias_c 

तो मुझे लगता है मैं सभी शब्दों है कि इसके तुरंत बाद नहीं कर रहे हैं को नष्ट करना चाहते जेनरेट करना चाहते हैं एक अल्पविराम और रेखा समाप्त

उत्तर

7

विकल्प 1:

%s/\v.*\s(\S+)$/\1/ 

विकल्प 2: मैक्रो

qa$T d0jq 

तोका उपयोग कर 0 एक्स कितने लाइनों आप बाहरी कमांड को यह मैक्रो

विकल्प 3

बारी लागू करना चाहते है:

:%!awk '$0=$NF' 

विकल्प 4: आप संरेखित या इसी तरह प्लगइन है, उन पंक्तियों को सही ढंग से संरेखित करें, फिर c-v ब्लॉक का चयन करें और निकालें, बस अंतिम कॉलम छोड़ दें।

+0

मैंने विकल्प 1 किया। धन्यवाद। –

3

मुझे क्या करना होगा:

:%s/\v(.*\s)(\w\+)/\2/ 

कैप्चर समूह 1 में पिछले अंतरिक्ष जब तक सब कुछ हड़पने के लिए इसका मतलब है, बाद में कब्जा समूह 2 में सब कुछ, और बस पर कब्जा समूह 2.

साथ बदलें इस बदलता है:

select 
column_a blah blah blah alias_a, 
column_b foo foo foo alias_b, 
column_c bar bar bar alias_c 

from 

करने के लिए:

select 
alias_a, 
alias_b, 
alias_c 

from 

फिर आपपंच कर सकते हैंएलियास को एक अल्पविराम से अलग लाइन में लाने के लिए कुछ बार।

+0

मैं दिखाई दे रही है "पैटर्न नहीं मिला : \ v (। * \ s) (\ w \ +) –

+0

हम्म, मैंने बिल्कुल अपने विम में टाइप किया और यह मेरे लिए काम किया, मुझे यकीन नहीं है कि आपके मामले में क्या भिन्न हो सकता है। – Tim

4

यह करना चाहिए:

:%s/.* \(.*\)\n/\1/
+0

क्या अंत में अल्पविराम को भी पकड़ नहीं पाएगा? –

+0

@BrianRasmussen: हां, ऐसा लगता है कि ओपी क्या पूछ रहा था। –

+0

ऐसा नहीं है कि मैंने इसे कैसे पढ़ा, लेकिन मैं देख सकता हूं कि आपका क्या मतलब है। कृपया मेरी टिप्पणी को अनदेखा करें। –

0

दिखने में लाइनों तो अमल निम्नलिखित

:norm $bd0 
:*j 

नोट का चयन करें: :norm अधिक मदद देखें के रूप में :'<,'>

दिखाई देगा:

:h :norm 
:h :j 

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