विम के लिए ऑटो इंडेंट / फॉर्मेट कोड?


35

जब मैं कर सकता हूं, मैं विम का अधिक से अधिक उपयोग करने की कोशिश कर रहा हूं। वीम और अप्पन जैसी आईडीई के बीच मेरी सबसे बड़ी पकड़ ऑटो इंडेंट की क्षमता है।

क्या ऑटो फ़ॉर्मेटिंग कोड (HTML, CSS, PHP) का कोई साधन है ताकि यह ठीक से इंडेंट हो?

यदि ऐसा है तो आप इसे विम में कैसे स्थापित करते हैं? मुझे प्लगइन्स की बहुत समझ नहीं है। मैंने इस धागे की समीक्षा करने की कोशिश की और इसने मुझे और उलझन में डाल दिया: विम ऑटो-इंडेंट व्यवहार को कैसे बदलें?


क्या आप स्पष्ट कर सकते हैं कि आप किस भाषा की ओर संकेत कर रहे हैं? मुझे उम्मीद है कि अगर यह विम द्वारा समर्थित है तो पहले से ही इसे और अधिक प्रयास के बिना ऑटो-इंडेंट करना चाहिए। यदि नहीं, तो आपको एक प्लगइन प्राप्त करने में सक्षम होना चाहिए।
एड्ड स्टील

आदर्श रूप से Html / css और php
chrisjlee

जवाबों:


54

संपूर्ण फ़ाइल को स्वचालित रूप से इंडेंट करने के लिए:

gg
=G

व्याख्या की:

  • gg - फाइल की शुरुआत में जाएं
  • G - फाइल के अंत में जाएं
  • =- इंडेंट

2
क्या आप इसे तोड़ सकते हैं? जी आमतौर पर अपने आप क्या होता है? और = जी?
च्रिसलीली

@ क्रिस एडिट
टेकेशिन

1
अच्छा संकेत है, मैं यह कभी नहीं जानता था। हालांकि, यह बकवास के साथ एक बकवास काम करता है।
स्पार्कहॉक

gg=Gफ़ाइल को खोले बिना शेल से निष्पादित कैसे करें ?
WM

@ ताकेशिन क्या आप इसे बहुत आगे समझा सकते हैं, क्या हमें इसे फ़ाइल में टाइप करने की आवश्यकता है या क्या हमें इसे टर्मिनल में चलाने की आवश्यकता है
कसुन सियामबलपिटिया

14

मुझे मौजूदा कोड ऑटो-स्वरूपण के बारे में नहीं पता है, लेकिन यदि आप कोड लिख रहे हैं और ऑटो इंडेंट की आवश्यकता है:

  • :set autoindent(या :set ai) ऑटो-इंडेंट चालू करेगा
  • Ctrl- dअपने कोड को एक-इंडेंट (एकेए एसेन्टेंट) करने के लिए
  • टैब या रिक्त स्थान इंडेंट करने के लिए - मैं व्यक्तिगत रूप से टैब का उपयोग करता हूं
  • :set tabwidth=4(या :set tw=4) यह नियंत्रित करेगा कि एक टैब को कितने स्थानों पर कोड इंडेंट करना चाहिए
  • >>आदेश वर्तमान पंक्ति इंडेंट होगा। यदि आप इसे एक संख्या से उपसर्ग करते हैं, 4>>तो कहें कि यह वर्तमान रेखा से शुरू होकर 4 लाइनों को इंडेंट करेगा।
  • इसी तरह <<कमांड एक लाइन को इंडेंट करेगा

मुझे उम्मीद है कि इससे आपको अच्छी शुरुआत मिलेगी।


7
मौजूदा कोड को ऑटो-इंडेंट करने के लिए, ={motion}सामान्य मोड में उपयोग करें - उदाहरण के =Gलिए वर्तमान लाइन से फ़ाइल के अंत तक सभी कोड को इंडेंट करेंगे। ==करंट लाइन को इंडेंट करेगा।
एड्ड स्टील

1
यह भी सुनिश्चित करें कि इंडेंट प्लग लोड किए जा रहे हैं (जैसे कि :filetype indent on)
jw013

2
सेट ट्वि = 4 ने TEXTWIDTH को 4
स्टीफन रोलर

4

ऑटो इंडेंट *.sh

बस निम्नलिखित पंक्तियों को जोड़ें ~/.vimrc

filetype indent on
set smartindent
autocmd BufRead,BufWritePre *.sh normal gg=G

क्या यह केवल vim या सभी एडिटर टूल्स के साथ एडिटिंग पर लागू होता है?
WM

1
~./vimrcकेवल विम संपादक के लिए लागू।
राहुल पाटिल

2

यह प्लगइन आपके कोड पर फ़ॉर्मेट करना आसान बनाता है। यह बाहरी फॉर्मेटर्स को एकीकृत करता है, और विम की इंडेंट कार्यक्षमता पर कमबैक होता है।

https://github.com/Chiel92/vim-autoformat

इसके अलावा, स्वरूपण और इंडेंटिंग के बीच अंतर पर ध्यान दें। इंडेंटिंग केवल हर लाइन से पहले व्हाट्सएप को सही करता है, जबकि फॉर्मेटिंग किसी अन्य चीज से भी निपटती है, जैसे कि ऑपरेटरों के आसपास व्हाट्सएप आदि।


2

~/.vimrcफ़ाइल बनाएं / संपादित करें और निम्न पंक्ति जोड़ें:

set autoindent

2
यह मौजूदा जवाबों के लिए कुछ भी नहीं जोड़ता है ...
jasonwryan

@ajonwryan वास्तव में हाई वू के उत्तर का उल्लेख है :set autoindentजो केवल वर्तमान फ़ाइल के लिए ऑटो इंडेंट को सक्षम करता है। इसे .vimrcफ़ाइल में जोड़ने से ऑटो इंडेंट स्थायी रूप से सक्षम हो जाता है।
माहेश्वरी

आपकी टिप्पणी का उल्लेख राहुल के जवाब से पहले ही मिल चुका है, इसलिए पोस्ट करने से पहले सोचें
इंद्रजीत गौर

0

बैश में मैं ऐसा करता हूं:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri| cut -c 5-|head --lines=-1|tail --lines=+3

यह टिप्पणियों को समाप्त करता है और स्क्रिप्ट को "बैश तरीका" के रूप में बताता है। यदि स्क्रिप्ट में HEREDOCS है, लेकिन यदि आप ऐसा करते हैं तो यह काम नहीं करेगा:

source <(echo "Zibri () {";cat script_to_be_reindented.sh; echo "}")
declare -f Zibri|head --lines=-1|tail --lines=+3

यह किसी भी स्क्रिप्ट के साथ काम करेगा लेकिन पूरी स्क्रिप्ट 4 स्थानों द्वारा इंडेंट की जाएगी। बेझिझक संशोधित करें, लेकिन अपनी स्क्रिप्ट में मेरा नाम उद्धृत करें और इसे पोस्ट करें! : डी


मेरा मानना ​​है कि यह प्रश्न के बिंदु को याद कर सकता है; मैं लाइनों के एक सेट को इंडेंट करने के बजाय, मुझे विश्वास है कि ओपी ने विभिन्न भाषाओं के लिए वीआईएम के भीतर ऑटो-इंडेंट की कामना की। एक अलग रूप में के रूप में, आप इस एक छोटे से अधिक के साथ सीधे प्राप्त करने में सक्षम हो सकता है sed: यदि आप चाहें तो cat script_to_be_reindented.sh | sed 's#^# #g'(एर, ठीक है, अतः markdown टैब के साथ रिक्त स्थान की जगह है, लेकिन आप समझ गए होंगे)
eacousineau

0

vim का ऑटोफ़ॉर्म / इंडेंट बहुत अच्छी तरह से काम करता है। सबसे पहले, इस लाइन को अपने में रखें ~/.vimrc:

filetype plugin indent on

फिर vim में एक फ़ाइल खोलें और टाइप करें gg=G

( ggकर्सर को पहली पंक्ति में ले जाता है। =इंडेंट कमांड चलाता है। Gइंडेंट कमांड को यहां से अंतिम लाइन तक चलाने के लिए कहता है।)

यदि ऑटोफ़ॉर्मट वास्तव में खराब दिखता है, जैसे कि हर पंक्ति को केवल इंडेंट छोड़ दिया जाता है, तो चलाएं :scriptnamesऔर जांचें कि क्या .../indent/html.vim(या जो भी भाषा आप उपयोग कर रहे हैं) सूची में है। यदि नहीं, तो सुनिश्चित करें कि आपका ~/.vimrcसही है। या यदि आप :filetype plugin indent onविम कमांड लाइन से भागे हैं , तो आपको फाइल को फिर से खोलना होगा:e

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