2012-09-25 25 views
9

में चिपकाने टैब बनाए रखने के लिए मैं टैब कुंजी का उपयोग विम में मेरी अजगर कोड इंडेंट करने के लिए है, लेकिन जब भी मैं कॉपी और एक ब्लॉक पेस्ट विम 4 स्थानों के साथ हर टैब है, जो एक IndentationErrorकैसे जब विम

मैंने कोशिश को जन्म देती है बदल देता है के रूप में संबंधित प्रश्नों में सुझाव दिया है, लेकिन यह कोई फर्क नहीं

अन्य साइटों चिपकाने 'tabless' कोड और फिर से मांगपत्र के विज़ुअल संपादक उपयोग करने का सुझाव बनाता :set paste की स्थापना, लेकिन यह मुसीबत के लिए पूछ रहा है जब यह बड़े ब्लॉकों

की बात आती है क्या कॉपी/पेस्ट पर टैब बनाए रखने के लिए मैं कोई भी सेटिंग लागू कर सकता हूं?

इस के साथ किसी भी मदद के लिए धन्यवाद :)

संपादित करें:

मैं कर रहा हूँ और कॉपी करने vim भीतर चिपकाने मानक GNOME टर्मिनल तकनीक का उपयोग (Ctrl + Shift + ग/माउस आदि)

मेरी .vimrc है:

syntax on 
set ts=4 
if has("terminfo") 
let &t_Co=8 
let &t_Sf="\e[3%p1%dm" 
let &t_Sb="\e[4%p1%dm" 
else 
let &t_Co=8 
let &t_Sf="\e[3%dm" 
let &t_Sb="\e[4%dm" 
endif 

मैं ऊपर देखा कि tS -> सेट टैब पाठ इनपुट के लिए n करने के लिए बंद हो जाता है, लेकिन wha पता नहीं है टी मान एक टैब वर्ण

+0

क्या आप विम के भीतर चिपक रहे हैं, या विम से दूसरे प्रोग्राम में, या किसी अन्य प्रोग्राम से vim? –

+0

आपकी इंडेंटेशन सेटिंग्स क्या हैं? 'टैबस्टॉप', 'विस्तारटैब', 'शिफ्टविड्थ', 'शिफ्टग्राउंड', 'ऑटोइंडेंट', 'कॉपीइंडेंट'। – romainl

+0

मैं विम में कॉपी और पेस्ट कर रहा हूं लेकिन मानक gnome-terminal तकनीकों का उपयोग कर रहा हूं (ctrl + shift + c या दायां-माउस-क्लिक -> प्रतिलिपि) – Awalias

उत्तर

5

सभी विकल्पों के लिए :h tabstop देखें और वे एक दूसरे के साथ कैसे बातचीत करेंगे।

ये अच्छा सेटिंग्स अगर आप टैब पसंद करते हैं:

set tabstop=4 
set shiftwidth=4 
set noexpandtab 
इन सेटिंग के साथ

, आप <Tab> मारा और आप <Tab> मिलता है।

ये अच्छा सेटिंग्स अगर आप रिक्त स्थान पसंद करते हैं:

set tabstop=4 
set shiftwidth=4 
set expandtab 
इन सेटिंग के साथ

, आप <Tab> मारा और आप <Space><Space><Space><Space> मिलता है।

जो भी आप चुनते हैं, आपको प्रतिलिपि बनाने/चिपकाने के लिए अपनी टर्मिनल कुंजी बाइंडिंग का उपयोग नहीं करना चाहिए। विम के अंदर, आपको y के साथ "yank" होना चाहिए और p या P के साथ "डाल" होना चाहिए; वैकल्पिक रूप से "ay/"ap जैसे किसी विशिष्ट रजिस्टर का उपयोग @a या "+y/"+p की सामग्री क्लिपबोर्ड से/yank/पेस्ट करने के लिए/यदि आपके विम क्लिपबोर्ड समर्थन के साथ बनाया गया है) की सामग्री से यांक/डालकर/

एक साइड नोट के रूप में, आपको अपनी सेटिंग्स के लंबे फॉर्म नामों का उपयोग करना चाहिए क्योंकि वे अपने छोटे समकक्ष से अधिक पठनीय हैं। आपका भविष्य स्वयं आपको धन्यवाद देगा।

2

सबसे पहले, सुनिश्चित करें कि आपकी इंडेंट सेटिंग्स आपकी पसंदीदा शैली का प्रतिनिधित्व करती है, क्योंकि रोमैनल ने अपने जवाब में दिखाया है।

यदि आपको बाहरी Vim से कोड पेस्ट करना होगा (उदा।किसी अन्य टर्मिनल से चयन), :retab! कमांड स्पेस को टैब पर ठीक कर सकता है; चिपकाया पाठ के लिए उचित सीमा के साथ पूर्ण आदेश

:'[,']retab! 

वैकल्पिक रूप से हो सकता है, आप "*]p आदेश, जो स्वत: कर्सर की स्थिति को मांगपत्र (:help ]p देखें) adapts के साथ चिपकाने की कोशिश कर सकते।

5

What romainl said। साथ ही, कुछ अन्य सेटिंग्स भी हैं जो मुझे उपयोगी लगती हैं। यहाँ मेरी .vimrc से एक अंश है:

set autoindent " always set autoindenting on" 
set smartindent " use smart indent if there is no indent file" 
set tabstop=4 " <tab> inserts 4 spaces" 
set softtabstop=4 " <BS> over an autoindent deletes 4 spaces." 
set smarttab " Handle tabs more intelligently" 
set expandtab " Use spaces, not tabs, for autoindent/tab key." 
set shiftwidth=4 " an indent level is 4 spaces wide." 
set shiftround " rounds indent to a multiple of shiftwidth" 

vim में, इनमें से प्रत्येक सेटिंग वे क्या करते हैं के बारे में अधिक जानने के लिए :h <setting> दर्ज करें,

1

मैं था एक टर्मिनल vim उदाहरण में बीच-क्लिक करें-पेस्ट । मैं अपने vimrc में यह है:

set tabstop=2   " (ts) 
set softtabstop=2  " (sts) Turned off with 0 
set shiftwidth=2  " (sw) Used for autoindent, and <<and>> 
set expandtab   " (et) Expand tabs to spaces 

मैं

:set paste 
:set noexpandtab 

भाग गया और vim टैब स्रोत पाठ में थे संरक्षित। मेरे expandtab सेटिंग को ओवरराइड किए बिना, vim स्रोत टेक्स्ट में टैब को स्वत: विस्तारित कर रहा था।