পুনরায় ইনডেন্ট শেল স্ক্রিপ্ট


11

আমার কাছে একটি বড় শেল স্ক্রিপ্ট রয়েছে যা স্পেস এবং ট্যাবগুলির মিশ্রণ ব্যবহার করে। আমি এক্সিলিপসের ফর্ম্যাটের মতো সিনট্যাক্সের ভিত্তিতে পুরো ফাইলটি পুনরায় প্রবেশ করতে চাই। এমন কোনও প্রোগ্রাম আছে (শোভিত করবেন?) যা এটি করবে?

আমি একসাথে জ্যাম থাকা সমস্ত কিছু দিয়ে যুক্তি সন্ধান করতে খুব কষ্ট পাচ্ছি

   if [ "$CANCELLATION" ]
   then
   while test $num -gt 0
    do
    if [ "$cjb" -gt 0 ]

ভিমে ফাংশনগুলি কীভাবে কল করতে শিখেছি কিন্তু এটি কার্যকর হয়নি।

ইম্যাকস - সমস্ত নতুনলাইন হারিয়েছে

উত্তর:


13

ইমাকগুলি এটি করতে পারে:

  • ইম্যাক্সে ফাইল লোড করুন
  • ফাইলের শীর্ষে Ctrl- টিপুনspace
  • কার্সারটি ফাইলের নীচে সরান
  • টিপুন Alt- Xএবং untabifyতারপর টাইপ করুনreturn
  • টিপুন Alt- Xএবং indent-regionতারপর টাইপ করুনreturn

এটি ট্যাবগুলি থেকে মুক্তি এবং সমস্ত কিছু সঠিকভাবে ইনডেন্ট করবে।

আপনার যদি আরও প্রায়ই এটি করা প্রয়োজন হয় এবং আপনার সম্পাদক হিসাবে ইমাকগুলি ব্যবহার না করেন তবে আপনি এগুলি সমস্ত স্ক্রিপ্টে প্যাক করতে পারেন:

#!/usr/bin/emacs --script

(setq require-final-newline 'visit)

(defun indent-files (files)
  (cond (files
         (find-file (car files))
         (untabify (point-min) (point-max))
         (indent-region (point-min) (point-max))
         (save-buffer)
         (kill-buffer)
         (indent-files (cdr files)))))

(indent-files command-line-args-left)

;; EOF ;;

1
সত্যিই কোনও ইমাস লোক নয় - তবে যদি সুপার শেল ভিএম কাজ না করে। আমি চেষ্টা করব।
jsymolon

1
M->এটির জন্য সাধারণ বাঁধাই end-of-buffer। কারণ কীবোর্ড থেকে আপনার হাত বন্ধ করা দুরাচার।
ডিএমকেকে --- প্রাক্তন-মডারেটর বিড়ালছানা

3
এছাড়াও পুরো বাফারটি চিহ্নিত করে কাজটি করা যেতে পারে C-x h, যা চলে mark-whole-buffer
ভিক্টর

উজ্জ্বল! দুটি জিনিস: (i) untabifyসবকিছু অনির্বাচিত হয়ে যাওয়ার পরে আমাকে অঞ্চলটি পুনরায় নির্বাচন করতে হবে এবং (২) এটি কি কেবল মেনুতে থাকার জন্য ব্যবহৃত হয়নি? এটি হওয়ার যোগ্য!
#_meije

5

ভিআই / ভিমে একবার আপনি সঠিক ফাইল সিনট্যাক্স সেট করেছেন ( :set syntax=sh), আপনি টিপতে পারেন: gg=G(বা 1G=G) পুরো ফাইলের ইনডেন্টেশনটি সংশোধন করতে।

পুরো ফাইলটিকে স্থানে ফর্ম্যাট করার জন্য এখানে আদেশ দেওয়া হয়েছে:

ex +"set syn=sh" +"norm gg=G" -cwq foobar.sh

দ্রষ্টব্য: উপরের কমান্ডটি চালানোর আগে একটি ব্যাকআপ নিন।

প্রথম বিন্যাস, তেজ ফাইল সম্পাদন করা পরীক্ষা এবং চালানোর জন্য: :norm gg=G

আরও দেখুন: ভি এসই তে খারাপভাবে ইনডেন্ট কোডটি পুনরায় প্রবেশ করা হচ্ছে


2
আমি এটি চেষ্টা করেছি (Vim 8.0) এবং এটি সঠিকভাবে কাজ করে নি। আমার অনুমান যে এটি শেল স্ক্রিপ্টটি প্রবেশ করার চেষ্টা করেছিল যেন এটি সি কোড; এটি সঠিকভাবে কিন্তু না কোঁকড়া ধনুর্বন্ধনী ঘাঁটা ifএবং fiকীওয়ার্ড। সম্ভবত কিছু প্লাগইন প্রয়োজন?
কিথ থম্পসন

আসলে, আপনার filetype=sh(বা ft) সেটিং করা উচিত ।
লিঙ্গফিশ

এটি মোটেও ভাল কাজ করে না। এটি আমার জটিল বাশ স্ক্রিপ্টের গোলমাল করে।
রোল ভ্যান ডি পার পার

2

দেখে মনে হচ্ছে shfmt আপনার জন্য কৌশলটি করতে পারে। এটি শেল / ব্যাশ কোড ফর্ম্যাট করে, এতে ইনডেন্টেশন অন্তর্ভুক্ত রয়েছে।

shfmt -l -w script.sh

1
যদিও এটি প্রশ্নের উত্তর দিতে পারে, আপনি কেন এটি করেন তার কিছু ব্যাখ্যা দিতে পারলে এটি আরও ভাল উত্তর হবে। আপনি কীভাবে এটি ব্যবহার করবেন তার উদাহরণ দিতে পারেন?
DavidPostill

গ্রেট! এই কাজ! আমি পরিচয় হিসাবে দুটি স্পেস ব্যবহার করেছি, সুতরাং আমার কমান্ডটি ছিলshfmt -i 2 -ci ~/mariadb-qa/pquery-run.sh
রোল ভ্যান ডি পার পার

0

আপনি সম্ভবত সুপার শেল ইনডেন্ট চান । এটি ~ / .vim / indent এ সংরক্ষণ করুন এবং আপনি যখন ভিমে থাকবেন তখন চালান ute:source ~/.vim/indent/sh.vim

আপনি সম্ভবত আপনার .vimrc এ ফাইল ভিত্তিক স্মার্ট ইনডেন্টিং সেটআপ করতে চান

" Turn on smart indenting
filetype indent on
set smartindent

আপনি যদি আপনার ফর্ম্যাটিংয়ের সাথে ভিমকে জবাবদিহি করতে আপত্তি করেন না তবে এই লাইনটিও ভিএমআরসি-তে যুক্ত করুন।

" When you load/save a shell script, auto indent it
autocmd BufRead,BufWritePre *.sh normal gg=G

যাইহোক, আপনি এখানে অপেক্ষা করেছেন here আপনি যখন ভিএম-তে একটি শেল স্ক্রিপ্ট সম্পাদনা করবেন তখন ধরে নিবেন আপনি স্মার্ট ইনডেন্টিং চালু করেছেন এবং সুপার শেল পরিচয় ইনস্টল করেছেন, আপনার স্ক্রিপ্টটি পুনরায় পাঠাতে কেবল অনুসরণ কীগুলিতে চাপুন:gg=G

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