শেল থেকে ভিআইএম কমান্ডের ফলাফল আউটপুট কিভাবে


11

ধরা যাক আমি শেল ( bash) এ আছি এবং যে আউটপুট দেবে তা দেখতে চাই :scriptnames, তবে ভিএম শুরু করতে চাই না বা অন্য কোনও ফাইলে ইকো করতে চাই।

সুতরাং আমি মৃত্যুদণ্ড কার্যকর

vim +scriptnames

যা আমাকে সমস্ত স্ক্রিপ্টগুলি দেখায়, তবে আমি কীভাবে শেলের স্টাডাউটে এটি প্রতিধ্বনি করব?

উত্তর:


10

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

এই বৈশিষ্ট্যটি (লিঙ্ক) এ ব্যাখ্যা করা হয়েছে:h xterm-screens

সুতরাং আপনি মূলত এটি চান না এবং তাই এটি অক্ষম করতে চান। আপনি :set t_ti= t_te=খালি এটি সম্পাদন করে এমন টার্মিনাল কোডগুলি সেট করে , এটি করতে পারেন।

সব কিছু একসাথে রেখে, আপনি এইভাবে ভিম শুরু করতে চান:

vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!'

আমরা 'more'বিকল্পটি পুনরায় সেট করছি , যাতে আপনি হিট-এন্টার-প্রম্পটটি দেখতে না পান।


1
এটি দুর্দান্ত, আপনাকে অনেক ধন্যবাদ! আমি আসলে সন্দেহ করেছিলাম এটি সম্ভব ছিল।
hgiesel

এটি কি স্ট্রাউডকে (বিশেষত ম্যাসোস্টিকদের জন্য) লেখার মাধ্যমে ভিএমএলকে একটি পূর্ণাঙ্গ সিস্টেম স্ক্রিপ্টিং ভাষা হিসাবে ব্যবহার করা সম্ভব করে?
শ্যাডট্যালকার

1
এর সাথে একটি সমস্যা হ'ল আমি টার্মিনালটি স্ক্রোল করতে পারছি না। (পাঠ্যটি যদি আমার টার্মিনালের উচ্চতার চেয়ে বেশি হয় তবে আমি শীর্ষটি দেখতে পাচ্ছি না) আমি যদি ভিএম খুলি তবে প্রস্থানটি পাঠ্যও অদৃশ্য হয়ে যায়।
এফডিনফ

@ এফডিনফ এটি পেজারদের মতোই lessরয়েছে। কেবল এটির মতো কম পাইপ করুন vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!' | less। লেআউটটি প্রথমে স্ক্রু আপ হতে পারে (এটি আমার টার্মিনালে রয়েছে), তবে <CL> টিপানোর পরে সবকিছু সুন্দর এবং জঘন্য।
hgiesel

চলমান অবস্থায় আমি কোনও আউটপুট দেখতে পাচ্ছি না vim -c ':set t_ti= t_te= nomore' -c 'scriptnames|q!', কেবলমাত্র একটি "দ্রুত ফ্ল্যাশ" রয়েছে, কোড 0 সহ কমান্ড প্রস্থান করুন, আউটপুট নেই। আমি কিছু অনুপস্থিত করছি?
ট্রুংডিকিউ 4'17

3

:redirভিএম কমান্ডের ফলাফলগুলি একটি ফাইলে পুনর্নির্দেশ করতে আমরা কমান্ডটি ব্যবহার করতে পারি

উদাহরণ স্বরূপ,

vim -c "redir! > vimout | scriptnames | redir END | q"

এটি আউটপুট scriptnames"vimout" ফাইলটিতে পুনর্নির্দেশ করে


1

আমি ক্রিশ্চিয়ান ব্র্যাব্যান্ডের দেওয়া উত্তরটির প্রশংসা করি তবে আমি মনে করি এর থেকে আরও ভাল উত্তর হ'ল এইভাবে অন্য-সি কমান্ডটি ব্যবহার করে ছাড়ার আদেশটি আলাদা করা:

vim -c ':set t_ti= t_te= nomore' -c 'scriptnames' -c 'q!' 

এই পদ্ধতিটি ব্যবহার করার অর্থ হ'ল আপনি এক সাথে বিভিন্ন কমান্ডের একসাথে স্ট্রিং করতে পারবেন এবং তারপরে চূড়ান্ত 'কিউ' ব্যবহার করতে পারবেন! ভিএম বাইরে বেরোতে।


0

আপনি যে পরিস্থিতিটি সম্পূর্ণরূপে লোড করে নেওয়ার প্রয়োজন সেই পরিস্থিতিতে যেমন আপনি নিজেই এটি শুরু করেছিলেন, এটি কাজ করে:

vim -c "autocmd! CursorHold * <commands to run>"

উদাহরণস্বরূপ, আমি :mapশেল থেকে কোনও ফাইলের আউটপুট পুনর্নির্দেশ করতে চেয়েছিলাম , কিন্তু আমি ভিএম -এয়ারলাইনটির ম্যাপিংটি ক্যাপচার করতে চেয়েছিলাম যা এটির ট্যাবলাইন প্রদর্শিত হবে (উপরে শীর্ষে রেখাঙ্কনটি সমস্ত বাফারনাম খোলা আছে)) কারণ এটি মনে হচ্ছে এই অবিচ্ছিন্নভাবে, কেবল -cকোনও ফাইলের পুনর্নির্দেশ চালানো ম্যাপিংগুলিকে সময় দেয়নি। আরও ভাল উপায় হতে পারে, তবে এটি আমার পক্ষে কাজ করে, বিশেষত যেহেতু আমি ইতিমধ্যে (০.০ সেকেন্ড) updatetimeসেট করে রেখেছি 100, যা CursorHoldইভেন্টটি চালিত হওয়া অবধি কতক্ষণ প্রভাবিত করে । ডিফল্টরূপে, ভিম এটিকে 4 সেকেন্ডে সেট করে।

vim -c "autocmd! CursorHold * set nomore | redir! > mapNew | map | redir END | q"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.