मैं एक विशिष्ट मूल्य पर इंडेंट लाइन को कैसे स्थानांतरित कर सकता हूं?


11

कई बार मैं ऐसी स्थिति में दौड़ता हूं जहां एक लाइन ठीक से इंडेंट नहीं होती है। एक पेस्ट के माध्यम से ईथर, खराब / नहीं पसंदीदा इंडेंट प्लगइन, या सबसे अधिक बार अतिरिक्त स्थान इंडेंट मूल्य ऑफसेट। मैं आमतौर पर इसे ठीक करता हूं <<या >>लाइन को ठीक करने के लिए कुछ बार। अतिरिक्त स्थानों के मामले में, मैं वास्तव में चाहते हैं प्रत्येक इंडेंट स्तर के लिए एक 100<<तो मैं करूँगा >>

सवाल यह |है कि गति की तरह जो आपको कॉलम को संख्या द्वारा सेट करने देता 10|है, कर्सर को 10 वें कॉलम पर भेजता है। मैं इंडेंट स्तर को कैसे निर्दिष्ट कर सकता हूं?

एक उदाहरण (यह काम नहीं करता है) shiftwidth=4 expandtab:

The quick (indent level 0)
••••Brown Fox (indent level 1)
••••••••••Jumped over the lazy dog (indent level 2 with two extra spaces)

इस स्थिति में मुझे वर्तमान में अंतिम पंक्ति (2) के इंडेंट स्तर को गिनना है और अतिरिक्त रिक्त स्थान के लिए एक जोड़ना है फिर टाइप करें 3<<कि मैं फिर क्या 1>>(या उपयोग autoindentऔर ==कमांड) के इंडेंट स्तर को गिनता हूं ।

मैं 1==इंडेंट लेवल को इंडेंट करने के लिए मजबूर करने के लिए कुछ मांग रहा हूं । 1. या कुछ मामलों में 0==इंडेंट को एक साथ हटाने के लिए।

मुझे लगता है कि उपरोक्त उदाहरण 1 या 0 लाइनों (क्रमशः) पर ऑटो इंडेंटिंग करता है और इसलिए वह नहीं करता है जो मैं चाहता हूं लेकिन उम्मीद है कि यह प्रश्न को बेहतर ढंग से समझने में मदद करेगा।

जवाबों:


18

आप :leftकमांड का उपयोग कर सकते हैं :

:[range]le[ft] [indent]
में वाम-संरेखित रेखाएँ [range][indent](डिफ़ॉल्ट 0) के लिए लाइनों में इंडेंट सेट करता है । {वि में नहीं}

ध्यान दें कि :leftसेट करने के लिए मांगपत्र n रिक्त स्थान, और के बारे में पता नहीं है shiftwidthया tabstopतो उपयोग करते हुए, :left 88 रिक्त स्थान का प्रयोग करेंगे।

यदि आप इंडेंटेशन स्तर सेट करना चाहते हैं, तो आप आसानी से एक कमांड परिभाषित कर सकते हैं:

command! -nargs=1 Left execute 'left ' . &sw * <args>

उपयोग :Left 28 स्थानों के लिए इंडेंटेशन सेट करेगा।

इसे मैप करने के लिए <Leader>=, आप इसका उपयोग कर सकते हैं:

noremap <expr> <Leader>= ':left ' . str2nr(nr2char(getchar())) * &sw . '<CR>'

मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है, लेकिन यह एकमात्र तरीका है जिसे मैं प्रबंधित कर सकता हूं ... \=2वर्तमान लाइन को 8 स्थानों पर 5\=3इंडेंट करेगा , और अगली 5 लाइनों को 12 स्थानों पर इंडेंट करेगा।


एक संबंधित संकेत जो आपकी समस्या को हल करता है वह shiftroundविकल्प सेट कर रहा है। से:help 'shiftround'

कई के लिए दौर इंडेंट 'shiftwidth'। पर >और < आदेशों पर लागू होता है । CTRL-T और CTRL-D इन्सर्ट मोड में हमेशा इंडेंट को एक से अधिक में राउंड करें 'shiftwidth'(यह Vi कम्पेटिबल है)।

आपके उदाहरण में, <<8 स्थानों के लिए पहला "गोल" होगा। तो आपकी समस्या (उपयोग 3<<और फिर >>) हल हो गई है। और जैसा कि हेल्प पेज कहता है, आप <C-d>इन्सर्ट मोड से भी उपयोग कर सकते हैं ।


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