ভিএম: + এক্স বিট দিয়ে ফাইল তৈরি করুন


14

+xতৈরি করার সময় স্ক্রিপ্টে বিট সেট করার কোনও উপায় আছে কি ?

উদাহরণস্বরূপ আমি চালান:

vim -some_option_to_make_file_executable script.sh

এবং সংরক্ষণের পরে আমি কোনও অতিরিক্ত চলন ছাড়াই ফাইল চালাতে পারি।

পুনশ্চ. আমি নিজে থেকেই কনসোল chmodথেকে vimবা এমনকি চালাতে পারি , তবে এটি কিছুটা বিরক্তিকর, কারণ vimফাইলটি পুনরায় লোড করার পরামর্শ দেয়। এছাড়াও chmodপ্রতিবার কমান্ড টাইপ করা বিরক্তিকর । PPS। ফাইল এক্সটেনশানের উপর নির্ভর করে এটি তৈরি করা দুর্দান্ত হবে (আমার কার্যকর করার দরকার নেই .txt:-))

উত্তর:


23

আমি এটি কোথায় পেয়েছি তা মনে নেই তবে আমি নিম্নলিখিতটি আমার। / .Vimrc এ ব্যবহার করি

" Set scripts to be executable from the shell
au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent !chmod +x <afile> | endif | endif

কমান্ডটি স্বয়ংক্রিয়ভাবে এক্সিকিউটেবল বিট সেট করে যদি প্রথম লাইন "#" দিয়ে শুরু হয়! বা "/ বিন /" ধারণ করে।


1
বাহ, এটা দুর্দান্ত জিনিস। বিটিডব্লিউ, মনে হয় আপনি দু'জনের ifমধ্যে একটিতে যোগ দিতে পারেন if getline(1) =~ "^#!/bin/"। যাইহোক এটি আশ্চর্যজনক। ধন্যবাদ.
নলখাগড়া

এটি কোনও "বা" নয়। আমি কেবল প্রথম শর্তটি ব্যবহার করতে পছন্দ করিau BufWritePost * if getline(1) =~ "^#!" | silent !chmod +x % | endif
ভল্ট

1
@ রশ যদি বিবৃতিগুলি হ'ল লাইনগুলি ধরা হয় তবে ডাবের কারণগুলি যেখানে শেবাংকে /binতত্ক্ষণাত অনুসরণ করে না, পছন্দ করে #!/usr/bin/env। একটি উপায় প্রায় অবশ্যই যে একটি ওয়াইল্ড কার্ড ব্যবহার করার জন্য: getline(1) =~ "^#!.*/bin/"
হ্যারাল্ড নর্ডগ্রেন

1
ঝরঝরে কৌতুক কিন্তু আমি যখনই সংরক্ষণ করি written/bin/bash: endif: command not found /bin/bash: endif: command not found
ততবারে

3
এটি এটিকে ঠিক করে দেয়:au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent execute "!chmod a+x <afile>" | endif | endif
স্টিভিডি

4

আমি এই স্ক্রিপ্টটি http://vim.wikia.com এ পেয়েছি । একটি নিখুঁত সমাধান নয়, তবে একটি গ্রহণযোগ্য, আমি মনে করি।

function! SetExecutableBit()
  let fname = expand("%:p")
  checktime
  execute "au FileChangedShell " . fname . " :echo"
  silent !chmod a+x %
  checktime
  execute "au! FileChangedShell " . fname
endfunction
command! Xbit call SetExecutableBit()

আপনি এখন কমান্ড দিয়ে এক্সিকিউট বিট সেট করতে পারেন :Xbit। সমস্ত ক্রেডিট vim.wikia.com এ ম্যাক্স ইসচেনকোকে


0

আমি এটি ম্যাকভিম কাস্টম সংস্করণ 8.0.648 (134) এ ব্যবহার করি

" if file is executable just exit

au BufWritePost *.sh if FileExecutable("%") | if getline(1) =~ "^#!" | silent !chmod u+x % | endif | endif

" Determines if file is already executable 

function! FileExecutable(fname)

    execute "silent! ! test -x" a:fname
    return v:shell_error

endfunction

0

টনিম্যাকের উত্তরটি আমার জন্য কাজ করা বন্ধ করে দেয় কিছু মুহুর্তে (ভিআইএম with.৪ সহ), যা আমাকে @ স্টেভিডির মতো একই সমস্যা দেয়। এটি সংশোধন করে সমস্যার সমাধান হয়েছে:

au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent execute "!chmod +x <afile>" | endif | endif

আমি https://bbs.archlinux.org/viewtopic.php?id=126304 থেকে উত্তরটি পেয়েছি , যদিও @ স্টেভিডিও একই উত্তর দিয়েছে।

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