জ্ঞাত ফাইল টাইপগুলি তালিকাভুক্ত করুন


54

ভিএম বর্তমানে যে ফাইল ফাইল টাইপের সম্পর্কে জেনে আছে তার নামের একটি তালিকা আমি কীভাবে পেতে পারি?

আমি এটি করতে সক্ষম হতে চাই যাতে যখন ভিএম স্বয়ংক্রিয়ভাবে কোনও ফাইল টাইপ সনাক্ত না করে আমি কিছু ফাইল টাইপ ভিএম চেষ্টা করতে পারি যা সম্পর্কে জানা থাকতে পারে এবং তারা যুক্তিসঙ্গত বাক্য গঠনটি হাইলাইট করে কিনা তা দেখুন।

আমি জানি যে ফাইল টাইপগুলির সাথে সম্পর্কিত উইমস্ক্রিপ্ট ফাইলগুলি ftpluginকনভেনশন দ্বারা ডিরেক্টরিতে রাখা হয় তবে সেগুলি হওয়ার দরকার নেই (আমি নিশ্চিত নই, তবে আমি মনে করি না ftpluginডিরেক্টরিতে থাকা উইমস্ক্রিপ্ট ফাইলগুলি বিশেষ বিশেষ) তাই আমি কেবল চাই এটি সম্পর্কে কী শিখেছে তা বিবেচনা না করে ভিমকে কী ফাইল টাইপগুলি সম্পর্কে জানে তা জিজ্ঞাসা করুন।


1
আপনি স্বয়ংক্রিয়ভাবে সম্পূর্ণ করার চেষ্টা করার সময় একটি তালিকা দেখতে পারেন :setfiletype (অর্থাত্ Tabকোনও স্থানের পরে)। এটি সম্পূর্ণ তালিকা কিনা বা কিছু বাফার / ফাইলে কীভাবে এটি ক্যাপচার করবেন তা নিশ্চিত নন।
ভ্যানল্যাসার

1
সম্পূর্ণকরণের তালিকার <c-d>পরিবর্তে ব্যবহার করুন <tab>
পিটার রিনকার

তালিকাটি ফিল্টার করতে একটি চিঠি বা কয়েকটি লিখুন এবং এই অক্ষরগুলি দিয়ে শুরু হওয়া এন্ট্রিগুলি দেখান।
শামাউকে

উত্তর:


63

সরল সমাধান

টাইপ করুন :setfiletype (পরে একটি স্থান সহ) , তারপরে চাপুন Ctrl-d

:help cmdline-completionভিএম এর কমান্ড লাইনে স্বতঃপূরণ সম্পর্কে আরও দেখুন ।

জটিল সমাধান

এই সমাধানটি 'runtimepath'সমস্ত উপলভ্য সিনট্যাক্স ডিরেক্টরিগুলি পেতে বিকল্পটি ব্যবহার করে এবং তারপরে তাদের এক্সটেনশনগুলি সরিয়ে সেই ডিরেক্টরিগুলিতে ভিমস্ক্রিপ্ট ফাইলগুলির একটি তালিকা এনে দেয়। এটি করার নিরাপদ উপায় এটি নাও হতে পারে, সুতরাং উন্নতিগুলি স্বাগত:

function! GetFiletypes()
    " Get a list of all the runtime directories by taking the value of that
    " option and splitting it using a comma as the separator.
    let rtps = split(&runtimepath, ",")
    " This will be the list of filetypes that the function returns
    let filetypes = []

    " Loop through each individual item in the list of runtime paths
    for rtp in rtps
        let syntax_dir = rtp . "/syntax"
        " Check to see if there is a syntax directory in this runtimepath.
        if (isdirectory(syntax_dir))
            " Loop through each vimscript file in the syntax directory
            for syntax_file in split(glob(syntax_dir . "/*.vim"), "\n")
                " Add this file to the filetypes list with its everything
                " except its name removed.
                call add(filetypes, fnamemodify(syntax_file, ":t:r"))
            endfor
        endif
    endfor

    " This removes any duplicates and returns the resulting list.
    " NOTE: This might not be the best way to do this, suggestions are welcome.
    return uniq(sort(filetypes))
endfunction

তারপরে আপনি এই ফাংশনটি যেভাবে চান ব্যবহার করতে পারবেন যেমন তালিকার সমস্ত মান মুদ্রণ করা। আপনি এটি যেমন সম্পন্ন করতে পারে:

for f in GetFiletypes() | echo f | endfor

নোট করুন যে এটি সম্ভবত বেশ খানিকটা কম্প্যাক্ট করা যেতে পারে, পঠনযোগ্যতার জন্য এটি ঠিক এটি। আমি এখানে ব্যবহৃত প্রতিটি ফাংশন এবং কমান্ড ব্যাখ্যা করব না, তবে এখানে তাদের জন্য সমস্ত সহায়ক পৃষ্ঠা রয়েছে:

  • :help 'runtimepath'
  • :help :let
  • :help :let-&
  • :help split()
  • :help :for
  • :help expr-.
  • :help :if
  • :help isdirectory()
  • :help glob()
  • :help fnamemodify()
  • :help add()
  • :help uniq()
  • :help sort()

1
আমি যখন টাইপ করি তখন set filetype<space><c d>এটি আমাকে একটি তালিকা প্রদর্শন করে তবে এইচটিএমএল তালিকায় নেই। জাভা তালিকায় নেই। সিনট্যাক্স বিন্যাসের কনফিগারেশনের সাথে মিলে থাকা ফাইল টাইপের অর্থে আমি ফাইল টাইপের নামগুলি কীভাবে দেখাব?
জন মেয়ার

6
@ জনমায়ার: আমিও একই ভুল করেছি। কমান্ডটি আসলে :setfiletype"সেট" এবং "ফাইল টাইপ" এর মধ্যে নির্দিষ্ট স্থান ছাড়াই। আপনি :help :setfiletypeএবং এর সাথে আরও তথ্য সন্ধান করতে পারেন :help ftdetect
সংস্কার

আমি এটি চেষ্টা করেছি, এবং এটি কার্যকর! বিটিডব্লিউ, আমি :setfiletype ht<Ctrl+D>এইচটিটি দিয়ে শুরু করে ফাইল টাইপের তালিকা তৈরি করতে ব্যবহার করতে পারি , যা অযাচিত ফলাফলগুলি ফিল্টার করে। :)
পিমজেক

18

আপনার ভিমের সংস্করণটি যদি সাম্প্রতিক পর্যায়ে হয় (v7.4.2011 +), আপনি এখন ম্যানুয়াল স্বয়ংক্রিয়তা সংজ্ঞা সংজ্ঞায়িত করতে সাহায্য করতে পারেন এমন ফাংশনটির সাথে পরিচিত ফাইল টাইপের জন্য বলতে পারেন: getcompletion()

:echo getcompletion('', 'filetype')

আপনি যদি একটি দিয়ে শুরু করে ফাইল টাইপগুলিতে তালিকাটি সীমাবদ্ধ রাখতে চান তবে আপনি 'c'কল করবেন

:echo getcompletion('c', 'filetype')

ইত্যাদি।

দ্রষ্টব্য: ফাইলগুলির নাম এবং ডিরেক্টরিগুলির নামগুলিকে পার্স করার মতো সমাধানগুলির বিপরীতে $VIMRUNTIME/{syntax,filetype}/, এই সমাধানটি বিশ্লেষণও করে 'runtimepath'। আমি যতদূর বুঝতে পেরেছি, এটি set ft=foobarফ্লাইতে নতুন ফাইল টাইপগুলি সংজ্ঞায়িত / নিবন্ধভুক্ত দেখতে পাচ্ছে না বা স্বতঃসংশোধের পরেও নয়।


3

আপনি নিম্নলিখিত 2 টি কমান্ড চালিয়ে টার্মিনালে সমস্ত ফাইল প্রিন্ট করতে পারেন:

1।

cd $(vim -e -T dumb --cmd 'exe "set t_cm=\<C-M>"|echo $VIMRUNTIME|quit' | tr -d '\015')

2।

cat <(ls -1 ftplugin/*.vim) <(ls -1 syntax/*.vim) | tr '\n' '\0' | xargs -0 -n 1 basename | sort | uniq | cut -f 1 -d '.'

প্রথম কমান্ডটি কেবল আপনার ভিম রানটাইম পাথে নেভিগেট করে (আমার জন্য এটি ছিল / usr / share / vim / vim80 )।

দ্বিতীয় কমান্ড দুটি ফোল্ডারে সমস্ত ফাইল টাইপের নাম তালিকাভুক্ত করে যেখানে vim ফাইল টাইপ সংজ্ঞা সংরক্ষণ করে।

হালনাগাদ

দুটি কমান্ডের উন্নতির প্রস্তাব দেওয়া হয়েছে মুরুর দ্বারা যা প্রস্তাব দেয়:

1।

cd $(vim -Nesc '!echo $VIMRUNTIME' -c qa)

2।

find syntax ftplugin -iname '*.vim' -exec basename -s .vim {} + | sort -u

3
এটি ওয়াহা খুব পাইপলাইন জটিল। ব্যবহার trশুধুমাত্র নাল নতুন লাইন রূপান্তর করতে যখন সহজ কমান্ড গ্রুপিং করবেন তা ফিরে ঠিক পরের কমান্ড, প্রক্রিয়া প্রতিকল্পন রূপান্তর করবে। আমি এর মতো কিছু প্রস্তাব দেব:find syntax ftplugin -iname '*.vim' -exec basename -s .vim {} + | sort -u
মুরু

ভাল, উপায় আরও সংহত। টার্মিনাল থেকে ভিআইএমআরআনটাইম মানটি খুঁজে পাওয়ার আরও ভাল সমাধান?
সমীর আলাজমোভিচ

1
vim -Nesc '!echo $VIMRUNTIME' -c qa, আমি মনে করি.
মারু

বাবা। দ্বিতীয় কমান্ড ভীতিজনক। দুঃখিত। আমি ভাল হচ্ছে না। ;) মজা জন্য, এখানে শুধু একটা বাহ্যিক কমান্ড ব্যবহার করে muru এর পরামর্শ করার জন্য একটি ব্যাশ বিকল্প (অভিমানী এর printfএকটি builtin): f=({ftplugin,syntax}/*.vim) && f=(${f[@]##*/}) && printf "%s\n" "${f[@]%%.*}" | sort -u। হায়ারোগ্লিফিক্সের ব্যাখ্যার জন্য বাশ ম্যান পৃষ্ঠাতে "প্যারামিটার সম্প্রসারণ" দেখুন।
বি লেয়ার

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