Vi / vim में, मैं इसे अधिलेखित करने के बजाय किसी फ़ाइल में कैसे संलग्न करूं?


11

मुझे पता है कि मैं बस कर के एक फ़ाइल को लिख सकते हैं :w <file>। मैं यह जानना चाहूंगा कि मैं इसे ओवरराइट करने के बजाय किसी फाइल पर कैसे लिख सकता हूं।

उदाहरण उपयोग मामला: मैं एक लॉग फ़ाइल से कुछ नमूने दूसरी फ़ाइल में लेना चाहता हूं। आज मैं यह कर सकता हूं:

  1. लॉग फ़ाइल खोलें
  2. के साथ कुछ पंक्तियों का चयन करें Shift+v
  3. एक फ़ाइल में लिखें: :w /tmp/samples
  4. के साथ कुछ और पंक्तियों का चयन करें Shift+v
  5. के /tmp/samplesसाथ संलग्न करें:w !cat - >> /foo/samples

दुर्भाग्य से चरण 5 लंबा, बदसूरत और त्रुटि प्रवण है (गायब होने >से आप डेटा खो देते हैं)। मुझे उम्मीद है कि विम के यहां कुछ बेहतर होगा।


3
यदि आप Vim का बेहतर उपयोग करने में रुचि रखते हैं, तो बहन साइट Vi और Vim को चेकआउट करें ।
मुरु

जवाबों:


26

से :h :w:

                                                :w_a :write_a E494
:[range]w[rite][!] [++opt] >>
                        Append the specified lines to the current file.

:[range]w[rite][!] [++opt] >> {file}
                        Append the specified lines to {file}.  '!' forces the
                        write even if file does not exist.

इसलिए, यदि आपने दृश्य विधा का उपयोग करके पाठ का चयन किया है, तो बस करें :w >> /foo/samples( :'<,'>स्वचालित रूप से पूर्व-निर्धारित किया जाएगा)। यदि आप एक पर बाहर याद आती है >, विम शिकायत करेंगे:

E494: Use w or w>>

यह सही है :) डॉक्स पढ़ने जैसा कुछ भी नहीं है। :hहालांकि पता नहीं था । इसका अधिक उपयोग करेंगे
ब्रूनो पोलाको

1
@BrunoPolaco के :hलिए बस आशुलिपि है :help। से शुरू करें :help helphelp? : डी
मूरू

0

एक फ़ंक्शन को परिभाषित करें:

fun! App(filename)
    exec "w !cat - >> " . shellescape(a:filename)
endfunc

एक समारोह को बुलाओ:

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