ভিমস্ক্রিপ্টে ওএস সনাক্ত করুন


38

খাঁটি ভিমস্ক্রিপ্ট (পাইথন বা পার্ল নেই ) ব্যবহার করে আমি কী বর্তমান অপারেটিং সিস্টেম (উইন্ডোজ, লিনাক্স, ওএস এক্স, ..) পুনরুদ্ধার করতে পারি ?

আমি আমার (সিঙ্ক্রোনাইজড) .Vimrc এ বিভিন্ন ধরণের অপারেশন সিস্টেম ব্যবহার করছি যার জন্য আমি বিভিন্ন সেটিংস সক্ষম করতে চাই ।


আপনি বাস্তবায়নের জন্য ওএস-নির্ভর আচরণের কয়েকটি নির্দিষ্ট উদাহরণ সরবরাহ করতে পারেন?
200_সুসেস

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

উত্তর:


42

সর্বোত্তম উপায়টি হ'ল ব্যবহার করা has(), এই ফাংশনটির সাথে আপনি ভিমের বৈশিষ্ট্যগুলি পরীক্ষা করতে পারেন; ওএস নির্দিষ্ট বৈশিষ্ট্যগুলি থেকে :help feature-list:

macunix                 Macintosh version of Vim, using Unix files (OS-X).
unix                    Unix version of Vim.
win32                   Win32 version of Vim (MS-Windows 95 and later, 32 or
                        64 bits)
win32unix               Win32 version of Vim, using Unix files (Cygwin)

এবং কিছু পুরানো (আধা-অবহিত) সিস্টেম:

amiga                   Amiga version of Vim.
os2                     OS/2 version of Vim.
win16                   Win16 version of Vim (MS-Windows 3.1).
win64                   Win64 version of Vim (MS-Windows 64 bit).
win95                   Win32 version for MS-Windows 95/98/ME.

উদাহরণ:

if has('win32')
    echo "Someone please open the Window(s)!"
endif

আরও নমনীয়তার বিকল্প উপায় হ'ল বাহ্যিককে কল করা, এটি unameআপনাকে সংস্করণ নম্বর এবং এগুলি পেতেও অনুমতি দেয়:

let uname = system('uname -a')

নোট যা unameবেশিরভাগ উইন্ডোজ সিস্টেমে উপস্থিত নেই।

ওএস সনাক্তকরণের চেয়ে বৈশিষ্ট্য সনাক্তকরণ ব্যবহার করা সাধারণত সেরা । উদাহরণস্বরূপ বৈশিষ্ট্যগুলির মধ্যে একটি ব্যবহার করে বা কোনও পথ রয়েছে কিনা তা পরীক্ষা করে। 200_সুকেস 'পোস্টটি এর একটি ভাল ওভারভিউ দেয়, তাই আমি এখানে একই বিষয়বস্তুটির পুনরাবৃত্তি করব না।has()


5
যদিও আপনি এটি ওএস এক্সে কাজ করতে চান তবে রোমেনেলের উত্তরটি নোট করা খুব গুরুত্বপূর্ণ ।
ধনী

নির্দেশকের জন্য +1:h feature-list
জেসিআই

24

has()একটি ভাল ধারণা মত শোনাচ্ছে যতক্ষণ না আপনি Mac OS X এর উপর এটি চেষ্টা করে দেখুন: ডিফল্ট /usr/bin/vim, has('unix')হয় সত্য কিন্তু উভয় has('macunix')এবং has('mac')হয় মিথ্যা যখন, নিয়মিত MacVim ডাউনলোড, সমস্ত তিনটি সত্য কিনা গুই বা Tui ব্যবহার করুন।

সুতরাং সেরা সমাধানটি has('winXX')উইন্ডোজের জন্য এবং unameইউনিক্সের মতো সিস্টেমে একটি মিশ্রণ । নোট করুন যে আউটপুটটি unameএকটি নতুন লাইনের সাথে শেষ তাই এটি ব্যবহারের আগে অবশ্যই পরিষ্কার করা উচিত।

আমি কোডটি কিছুক্ষণ ব্যবহার করছি, এর জন্য আপডেট করেছি win64:

if !exists("g:os")
    if has("win64") || has("win32") || has("win16")
        let g:os = "Windows"
    else
        let g:os = substitute(system('uname'), '\n', '', '')
    endif
endif

এর পরে, আপনি আপনার যে g:osকোনও জায়গায় চলকটি ব্যবহার করতে পারেন vimrc:

if has("gui_running")
    if g:os == "Darwin"
        set guifont=Fira\ Mono:h12
    elseif g:os == "Linux"
        set guifont=Fira\ Mono\ 10
    elseif g:os == "Windows"
        set guifont=Fira_Mono:h12:cANSI
    endif
endif

ওয়েল, ওএসএক্স একটি ইউএনআইএক্স সিস্টেম, আমি বিশ্বাস করি এটি এমনকি "শংসিত ইউএনআইএক্স"। তাই has('unix')সঠিক। has('macunix')যদিও এটি অদ্ভুত, এটি মিথ্যা। এই প্রায় বাগ মত শোনাচ্ছে?
মার্টিন টর্নোইজ

1
আমি কিছু চেকিং করেছি, এবং has('macunix')এটি নির্ভর করে বলে মনে হচ্ছে MACOS_X_UNIX, যা স্ক্রিপ্টে থাকলে সেট unameকরা Darwinআছে configure...
মার্টিন টর্নোইজ

অদ্ভুতভাবে যথেষ্ট, has ("win32")এমনকি আমার জন্য 64৪-বিট ভিমেও কাজ করে বলে মনে হচ্ছে।
সমৃদ্ধ

@ রিচ হ্যাঁ, এবং এটি এর মতো নথিভুক্ত। এটি সত্যিই করণীয় কাজ, আপনার অ্যাপ্লিকেশনটি 32 বা 64 বিট হলে আপনি কি যত্নশীল হন? আমি না। এটি 'win32' নামে অভিহিত হওয়ার কারণ হ'ল মাইক্রোসফ্ট এই নামটি তাদের উইন্ডোজ এনটি এপিআইয়ের জন্য পছন্দ করে। কিছু নামকরণ Microsoft এর শক্তিশালী বিন্দু নয়
মার্টিন টর্নোজাইজ

1
has('unix')উইন্ডোজ গিট ব্যাশের ক্ষেত্রেও এটি সত্য, সুতরাং অনুকরণীয় থেকে বাস্তব ইউনিক্সের পার্থক্য করার জন্য এটি খুব কার্যকর নয়।
উইসবাকী

8

পরিবেশের ভেরিয়েবল কার্যকর হবে।

সনাক্ত করতে tmux, আপনি পরীক্ষা করতে পারেন if !empty($TMUX)বা if $TERM == 'screen'

আপনি পরিবেশের ভেরিয়েবলগুলি $MACHTYPE( যা বাশ দ্বারা সেট করা হয় ) বা অপারেটিং সিস্টেমকে অপসারণ করতে পারেন $PATH

টিএফএসের মতো কোনও বৈশিষ্ট্য ইনস্টল রয়েছে কিনা তা সনাক্ত করতে আপনি executable()ফাংশনটি ব্যবহার করতে পারেন ।


"CH MACHTYPE (যা বাশের দ্বারা নির্ধারিত)" । প্রকৃতপক্ষে, যদি কোনও ভেরিয়েবল বাশ সেট করে থাকে, তার অর্থ এটি পরিবেশের পরিবর্তনশীল নয় এবং আপনি কেবল এটির সাহায্যে ভিমে এটি অ্যাক্সেস করতে পারবেন না $MACHTYPE। আপনাকে let machtype=system('echo -n $MACHTYPE')প্রথমে কিছু করতে হবে ।
উইসবুকি

4

অন্যরা ইতিমধ্যে ইঙ্গিত হিসাবে, একটি নির্ভরযোগ্য সনাক্তকরণ জটিল হতে পারে। চাকাটি পুনরায় উদ্ভাবন না করা, তাই আমি ভিআইএম-মিস লাইব্রেরি উল্লেখ করতে চাই , যা সরবরাহ করে xolox#misc#os#is_mac()এবং xolox#misc#os#is_win()কার্য করে।


1

আমি চেষ্টা করেছিলাম has('unix'), তবে আমার সমস্ত লিনাক্স, ম্যাক এবং উইন্ডোজ গিট ব্যাশ এর trueজন্য ফিরে আসার পরে আমি এটি সহায়ক মনে করি নি ।

unameলিনাক্স, ম্যাক, উইন্ডোজের মধ্যে খুব বেশি গ্রানুলারিটি ছাড়াই পার্থক্য করার কারণে আমি উপযুক্ত বলে মনে করেছি।

let uname = substitute(system('uname'), '\n', '', '')
" Example values: Linux, Darwin, MINGW64_NT-10.0, MINGW32_NT-6.1

if uname == 'Linux' || uname == 'Darwin'
    " do linux/mac command
else " windows
    " do windows command
endif
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.