আমি কীভাবে ভিএম-এ স্বয়ংক্রিয় ফর্ম্যাট / ইনডেন্ট সি কোড করব?


250

আমি যখন অন্য কোনও ফাইল থেকে কোড অনুলিপি করি, ফর্ম্যাটটি এইভাবে মিশে যায়:

fun()
{
for(...)
{
for(...)
{
if(...)
{
}
}
}
}

আমি কীভাবে এই কোডটি ভিএম-এ স্বয়ংক্রিয়ভাবে করতে পারি?


3
যে কোনও ব্যক্তির বিন্যাস করতে এবং কেবল কোডটি ইনডেন্ট করতে খুঁজছেন না তাদের জন্য, দ্বিতীয় উত্তর (খনি) এতে সম্বোধন করে। আপনি যদি কেবল ইনডেন্টিং ঠিক করতে চান তবে গৃহীত উত্তর হ'ল সহজতম উপায়।
ডেরেক

উত্তর:


566

নিম্নলিখিত কীস্ট্রোক চেষ্টা করুন:

gg=G

ব্যাখ্যা: ggফাইলের শীর্ষে যায়, =ইনডেন্টেশনটি ঠিক করার জন্য একটি আদেশ এবং Gএটি ফাইলের শেষে অপারেশন করতে বলে।


28
এটি কেবল কোডটি প্রবেশ করে। পুরো জিনিসটিকে অটোফর্ম্যাট করার জন্য কিছু করা যায় না?
এন 1.1

7
পার্থক্য কি?
টন ভ্যান ডেন হিউভেল

3
@ টন ভ্যান: পার্থক্যের জন্য আমার উত্তর দেখুন (মন্তব্যগুলিতে এখানে ব্যাখ্যা করা যায়নি)।
Lazer

2
-1 এটি কেবল ইনডেন্টেশন ঠিক করে, বিন্যাসকরণ নয় (যা যা বলা হয়েছিল)।
অলিগোফ্রেন

3
@ ওলিগোফ্রেন ওপি-র উদাহরণটিতে কেবল ইনডেন্টেশন ত্রুটি অন্তর্ভুক্ত ছিল এবং তিনি উত্তরটি গ্রহণ করেন, সুতরাং আমি অনুমান করি যে এটাই তার অর্থ।
আমির রাছুম

78

আমি আর্টিস্টিক স্টাইল প্রোগ্রামটি ব্যবহার করতে চাই। তাদের ওয়েবসাইট অনুযায়ী :

শৈল্পিক স্টাইল হল সি, সি ++, সি # এবং জাভা প্রোগ্রামিং ভাষার জন্য একটি উত্স কোড সূচক, বিন্যাসক এবং বিউটিফায়ার।

এটি উইন্ডো, লিনাক্স এবং ম্যাকে চলে। এটি ইনডেন্টিং, ফাঁকা জায়গাগুলির সাথে ট্যাবগুলি প্রতিস্থাপন করা, অপারেশনগুলির চারপাশে স্পেস স্থাপন করা (আপনার পছন্দ অনুসারে যদি এটি রূপান্তরিত if(x<2)হয় ) রূপান্তরকরণ ( x<2 ), ফাংশন সংজ্ঞা হিসাবে একই লাইনে ধনুর্বন্ধনী স্থাপন করা বা এগুলিকে সরিয়ে দেওয়ার মতো কাজ করবে নীচে লাইন, ইত্যাদি। সমস্ত বিকল্প কমান্ড লাইন পরামিতি দ্বারা নিয়ন্ত্রিত হয়।

এটি ভিমে ব্যবহার করতে, কেবল বিন্যাসের বিকল্প বিন্যাসটি সেট করুন এবং তারপরে gq কমান্ডটি ব্যবহার করুন। সুতরাং, উদাহরণস্বরূপ, আমার আমার .vimrc এ আছে:

autocmd BufNewFile,BufRead *.cpp set formatprg=astyle\ -T4pb

যাতে আমি যখনই একটি .cpp ফাইল খুলি, তখন আমার পছন্দ মতো বিকল্পগুলির সাথে ফর্ম্যাটপ্রিজ সেট করা থাকে। তারপরে, আমি ফাইলের শীর্ষে যেতে এবং gqGআমার মান অনুসারে পুরো ফাইলটি ফর্ম্যাট করতে জিজি টাইপ করতে পারি। আমার যদি কেবল একটি একক ফাংশনটি পুনরায় ফর্ম্যাট করার প্রয়োজন হয় তবে আমি ফাংশনের শীর্ষে যেতে পারি, তারপরে টাইপ করুন gq][এবং এটি ঠিক সেই ফাংশনটির পুনরায় ফর্ম্যাট করবে।

অ্যাস্টাইলের জন্য আমার যে বিকল্পগুলি রয়েছে -T4pb, সেগুলি কেবল আমার পছন্দ। আপনি তাদের ডক্সটি সন্ধান করতে পারেন এবং আপনার পছন্দ মতো কোডটি ফর্ম্যাট করার জন্য বিকল্পগুলি পরিবর্তন করতে পারেন।

এখানে একটি ডেমো রয়েছে। অ্যাস্টাইলের আগে:

int main(){if(x<2){x=3;}}

float test()
{
if(x<2)
x=3;
}

অ্যাস্টাইল (gggqG) এর পরে:

int main()
{
    if (x < 2)
    {
        x = 3;
    }
}

float test()
{
    if (x < 2)
        x = 3;
}

আশা করি এইটি কাজ করবে.


3
অন্যান্য ফর্ম্যাটগুলির জন্য কি এর মতো কিছু আছে; রুবি, এক্সএমএল, জসন, ইত্যাদি?
derGral

1
@ রায়ান ভিম-অটোফর্ম্যাট পরীক্ষা করে দেখুন, নীচে উত্তর দেখুন। বিটিডাব্লু ভিম-অটোফর্ম্যাট অন্যদের মধ্যে অ্যাস্টাইলও ব্যবহার করে।
চিয়েল দশ ব্রিনকে

1
ধন্যবাদ! আমি ভাবতে শুরু করেছিলাম আমি এই শব্দটির মধ্যে একমাত্র ব্যক্তি যিনি ফাংশন ঘোষণার মতো একই লাইনে তাদের খোলার বন্ধনীগুলি চান না!
ব্যবহারকারী 3640967

27

কোডটি সঠিকভাবে প্রবেশ করার জন্য বিল্টিন কমান্ড ইতিমধ্যে উল্লেখ করা হয়েছে ( gg=G)। যদি আপনি চাই প্রতি সুন্দর কোড, আপনার কাছে মত একটি বহিরাগত অ্যাপ্লিকেশন ব্যবহার করতে হবে ইন্ডেন্ট । যেহেতু %প্রাক্তন মোডে বর্তমান ফাইলটিকে বোঝায় তাই আপনি এটি ব্যবহার করতে পারেন:

:!indent %

13

ভিএম-অটোফর্ম্যাট প্লাগইন আপনাকে আপনার বাফার (বা বাফার নির্বাচন) একটি একক কমান্ড দিয়ে ফর্ম্যাট করতে দেয়: https://github.com/Chiel92/vim-autoformat । এটি এর জন্য বাহ্যিক ফর্ম্যাট প্রোগ্রামগুলি ব্যবহার করে, ভিমের ইনডেন্টেশন কার্যকারিতাটির ফ্যালব্যাক সহ।


11

আমি যে clang-formatভাল কাজ করে।

ঝনঝন ডকুমেন্টেশনে কিছু কী-বাইন্ডিং রয়েছে

আমি equalprgভিআইএম এ বাঁধাই ব্যবহার করতে পছন্দ করি । এটি আপনাকে অন্যান্য ইনডেন্ট বিকল্পগুলির clang-formatসাথে অনুরোধ করতে অনুমতি দেয় ।G=gg=

আপনার .vimrc ফাইলটিতে কেবল নিম্নলিখিতটি লিখুন:

autocmd FileType c,cpp setlocal equalprg=clang-format

3
প্রথমে এটি ইনস্টল করা দরকার, উদাহরণস্বরূপ উবুন্টু 16.04+ এর জন্য:sudo apt install clang-format
এরিক ওয়াং

3

হতে পারে আপনি নিম্নলিখিতটিগুলি চেষ্টা করতে পারেন $ indent -kr -i8 * .c

আশা করি এটি আপনার পক্ষে কার্যকর!


3

আমি indentউপরে বর্ণিত হিসাবে পছন্দ করি তবে বেশিরভাগ ক্ষেত্রে আমি যে ফাইলটিতে কাজ করছি তার কেবলমাত্র একটি ছোট অংশটি ফর্ম্যাট করতে চাই। যেহেতু indentস্টিডিনের কাছ থেকে কোড নিতে পারে, এটি সত্যই সহজ:

  1. আপনি যে কোডের সাথে ফর্ম্যাট করতে চান Vবা তার মতো ব্লকটি নির্বাচন করুন ।
  2. টাইপ করে ফর্ম্যাট করুন :!indent

astyle স্টিডিনও লাগে, তাই আপনি সেখানে একই কৌশল ব্যবহার করতে পারেন।


2

আমি যুক্ত করতে চেয়েছিলাম, যাতে প্রথম স্থানটিতে গোলমাল হওয়া থেকে রোধ করার জন্য আপনি :set pasteআটকে দেওয়ার আগে টাইপ করতে পারেন । পেস্ট করার পরে, আপনি :set nopasteআবার কাজ করতে জেএস-বিউটিফায়ার এবং ইনডেন্ট করার মতো জিনিসগুলির জন্য টাইপ করতে পারেন ।


1
আমি :set paste!এটির জন্য ব্যবহার করি যা এটি সেট করার পরিবর্তে পেস্ট মান টগল করে। এটি আপনাকে বন্ধ করতে আরও সহজ করে তোলে কারণ আপনি কেবল কয়েকটি কমান্ড পিছনে স্ক্রোল করে এন্টার টিপতে পারেন।
a'r

0

তাদের বলা একটি সরঞ্জাম indent। আপনি এটি দিয়ে ডাউনলোড করতে পারেন apt-get install indent, তারপরে চালান indent my_program.c

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.