আমি কীভাবে ভিমের মধ্যে থেকে "এসটিডিএন থেকে পড়া" বার্তাটি দমন করতে পারি?


18

স্টিমিন থেকে পড়তে ভিম ব্যবহার করার সময় এটি একটি তথ্যপূর্ণ বার্তা প্রিন্ট করে:

$ echo foo | vim -
Vim: Reading from stdin...

$

এইটা শুধুমাত্র একটা উদাহরণ. আসল ব্যবহার শেল নির্মাণের অনুমতি দেয় না। vim <(echo foo)একটি বিকল্প নয়।

আমি কি দমন করতে পারি যে কেবলমাত্র Vim বিকল্প এবং / অথবা vimrc সেটিংস ব্যবহার করে?


এটি কীসের জন্য আপনার জানা দরকার, আমি ম্যানপেজগুলি (নির্লজ্জ প্লাগ) পড়ার জন্য ভিম ব্যবহার করার চেষ্টা করছি । GNU ম্যান শেল তৈরির অনুমতি দেয় না MANPAGERএবং ব্যবহার ftplugin/man.vimএবং অন্যান্য জিনিস ব্যবহার করে আমি সাফল্যের সাথে ন্যায়সঙ্গত ব্যবহার করে একটি আরামদায়ক অভিজ্ঞতা অর্জন করতে পেরেছি MANPAGER="vim -"। সর্বশেষ অবশিষ্ট বিরক্তি হ'ল আমি দেখেছি এমন প্রতিটি ম্যানপেজের পরে ছদ্মবেশী বার্তা।


ব্যবহার export MANPAGER='vim -c "%! col -b" -c "set ft=man nomod nolist ignorecase" -'বা export MANPAGER="vim -"আমি কোন সমস্যা দেখতে পাচ্ছি? man lsপ্রত্যাশিত ম্যানপেজটি খোলে।
মার্টিন টর্নয়েজ

@ কার্পেটস্মোকার এবং আপনি এটি বন্ধ করার পরে?
মুড়ু

নাহ, কিছুই দেখতে পাবেন না ...
মার্টিন টর্নয়েজ

@ কারপেটসমোকার আপনি ভিমের কোন সংস্করণ ব্যবহার করছেন? কি সম্পর্কেecho foo | vim -Nu NONE -
মুরু

ভিমে, : help lessপেজার হিসাবে এটি ব্যবহারের জন্য কিছু তথ্য দেয়।
mtklr

উত্তর:


8

ভিম 8.0.1308 (নভেম্বর 2017) দিয়ে শুরু করে আপনি --not-a-termএই বার্তাটি দমন করতে বিকল্পটি ব্যবহার করতে পারেন ; উদাহরণস্বরূপ quit:

$ echo hello | vi - --not-a-term -esc '%p|q!'
hello

বা সাথে exit:

$ echo hello | vi - --not-a-term -esc 'x!/dev/stdout'
hello

যেমনটি এটি সমতুল্য cat, তবে এটি ইনপুটটিতে ভিমস্ক্রিপ্ট প্রয়োগ করার জন্য এখনও কার্যকর হতে পারে, যেমন +'runtime! syntax/2html.vim'স্টাইলড এইচটিএমএল হিসাবে হাইলাইটেড পাঠ্য রফতানি করা (অনুমিত বা নির্দিষ্ট ফাইল টাইপ ধরে)। এখন পর্যন্ত উল্লিখিত বিষয়গুলি ব্যতীত কয়েকটি বিকল্প রয়েছে; প্রথম যেটি মনে আসে তা হ'ল mktempকমান্ডের আউটপুট সংরক্ষণ করতে এবং এটি ভিমের ইনপুট হিসাবে ব্যবহার করা। আপনি ভিফের পুনর্নির্দেশ এবং শেল কমান্ডগুলি যুক্ত করে বাফারে কমান্ডের ফলাফল 'পেস্ট' করতে পারেন তবে এতে আরও কিছু কাজ লাগে। (ভিম স্ক্রিপ্ট ফাইলগুলি এলিয়াসগুলি ব্যবহার না করে দীর্ঘ অনুরোধগুলি স্বয়ংক্রিয় করতে পারে))
জন পি

কোনও সকেট থেকে আউটপুট সম্পাদনা / আটকানো সম্ভব হতে পারে, এটি যদি সত্য হয় তবে সত্যই কার্যকর হতে পারে। আমি এখনও বলি যে সর্বোত্তম বিকল্পটি একটি টেম্পল ফাইল, যদি না গৃহীত উত্তরের চেয়ে আরও খারাপ সংকেত থাকে। প্রদত্ত শেলের জন্য যদিও একটি বিদ্যমান নাম / বিল্টিন / সিনট্যাক্স থাকতে পারে যা এই প্রক্রিয়াটির কিছু অংশকে সহজতর করে, যেমন zshmisc (পুনর্নির্দেশ, ইত্যাদি) এর জন্য ম্যানপেজে তালিকাভুক্ত আরও একটি - সম্ভবত আপনি ইনপুটটি এড়াতে এবং সরবরাহ করতে পারবেন যুক্তি সন্নিবেশ মোডে প্রবেশ করার পরে একটি যুক্তি হিসাবে, তাই এটি টাইপ করা হিসাবে পার্স করে?
জন পি

আমি --not-a-termভিম 7.4.1689 উবুন্টু 16.04 এ দেখি (তবে একটি ম্যাকের উপর 7.4.8056 নয়) তবে এটি বার্তাটি দমন করে না।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

@ ডেনিস উইলিয়ামসন এর মাধ্যমে পরিবর্তনটি দেখুন :help version8.txt--not-a-termবিকল্পটি নিজেই যুক্ত করা হয়েছিল 7.4.1419এবং স্টিডিন থেকে বার্তা পাঠানো ... বার্তা ভিতরে দমন করতেও তার আচরণ পরিবর্তন করা হয়েছিল 8.0.1308। (উপায় দ্বারা, বার্তা সম্পাদনা করার জন্য এন ফাইলগুলিও এ থেকে চাপা দেওয়া হয় 8.1.1258)
ynn

12

আপনার সঠিক প্রশ্নের উত্তর :

আমি কি দমন করতে পারি যে কেবলমাত্র Vim বিকল্প এবং / অথবা vimrc সেটিংস ব্যবহার করে?

হল: না, এটা না নিম্নলিখিত অংশ কারণে সম্ভব কোড

    if (read_stdin)
    {
#ifndef ALWAYS_USE_GUI
        mch_msg(_("Vim: Reading from stdin...\n"));
#endif

যার অর্থ হ'ল আপনি যদি -ভিমকে যুক্তি হিসাবে দেন তবে তা যান্ত্রিকভাবে সেই বার্তাটি প্রদর্শন করবে।

যদিও চারপাশের কাজ হিসাবে, আপনি যদি -যুক্তির পরিবর্তে কোনও ফাইল পুনঃনির্দেশ ব্যবহার করেন তবে আপনি বার্তাটি থেকে মুক্তি পাবেন:

echo "foo" | vim < /dev/tty

এবং এখানে MANPAGEসুনির্দিষ্টভাবে কাজ করার সেটিংয়ের একটি উদাহরণ ™ (ইন্টারটিউবগুলি থেকে নেওয়া):

export MANPAGER='bash -c "vim -MRn -c \"set ft=man nomod nolist nospell nonu\" -c \"nm q :qa!<CR>\" -c \"nm <end> G\" -c \"nm <home> gg\"</dev/tty <(col -b)"'

2
যখন হয় ALWAYS_USE_GUI সংজ্ঞায়িত, আপনি জানেন?
মারু

2
বৈশিষ্ট্য দেখুন (
ক্রিশ্চিয়ান ব্রাবাঁট

2
আমি কাজের মতো echo "foo" | vim < /dev/ttyকাজ পেতে পারি না । এটা করে দেয় [2]+ Stopped echo "foo" | vim < /dev/tty
লিও লোপল্ড হার্টজ 준영

2
@ লোওলোপল্ড হার্টজ Like এর মতো টিটিটি ট্রিক আমার পক্ষে কাজ করেনি (জিভিএম একটি খালি ডকুমেন্ট দেয়, ভিম কীবোর্ডের ইনপুটগুলির সাথে সত্যই বিভ্রান্ত হয়ে পড়ে, তবে কমপক্ষে এটি একটি সাইনস্টপ পায় না)। আমি আরও ভাগ্যবান ছিলাম echo "foo" | gvim /dev/stdin(যদিও নন-জিইউআই ভিআইএম এখনও সেই বিষয়ে অভিযোগ জানাবে Vim: Warning: Input is not from a terminal:)।
অ্যাডাম কাটজ

2
আচ্ছা, আমার আগের বার্তাটি ভুলে যাও উত্তরের কৌশলটি কিছুটা <(col -b)অংশ in catম্যান পেজগুলি মুদ্রণের জন্য এটি মূলত কয়েকটি পরিশীলিত সংস্করণ এবং আপনি অবশেষে ভিমের বার্তাটি থেকে মুক্তি পেতে পারেনecho test | vim < /dev/tty <(cat>
আলেকজান্ডার সলোভেটস

1

ভিমে , এই সমস্যাটি 234d162কমিট (> = v8.0.1387) তে সম্বোধন করা হয়েছে ।

সমাধান: বার্তাটি --not-a-termব্যবহার করা হয়নি তা ব্যবহার করবেন না ।

সুতরাং মেসেজটি কেবল তখনই প্রদর্শিত হয় যখন ব্যবহারকারী স্টিনকে পুনঃনির্দেশ করেন না।


অনুরূপ ইস্যুটি Neovim ( > = v0.2.2-dev ) এর সাম্প্রতিক সংস্করণে সম্বোধন করা হয়েছে যা আপনি ভিমের পরিবর্তে ব্যবহার করতে পারেন।

NVim v0.2.2 প্রকাশিত হয়ে গেলে, আপনার চালানো উচিত:

$ echo foo | nvim -

বার্তা না রেখে।


0
  1. 8.0.1387 সংস্করণের ভিএম এবং আরও নতুন --not-a-termবিকল্পের সাহায্যে আপনি বিকল্পটি ব্যবহার করতে পারেন ।

  2. পুরানো সংস্করণের জন্য নিম্নলিখিত কৌশলটি ব্যবহার করুন: $ echo foo | bash -c 'vim < /dev/tty <(cat)'

প্রথম যুক্তিটি /dev/ttyকোনওভাবে ভিমকে কৌশলটি কীবোর্ড থেকে আসে বলে মনে করার কৌশল করে। আমার ধারণা, কারণ কারণ (3) সেই ফাইলটির জন্য সত্য দেয় returns এবং দ্বিতীয় যুক্তিটি কেবল তার স্ট্যান্ডার্ড ইনপুট থেকে ভিমের স্ট্যান্ডার্ড ইনপুট পর্যন্ত সমস্ত কিছু পাস করে। পরিশেষে, শেলটি সমর্থন না bash -cকরে বিশেষ নির্মাণের জন্য উপসর্গের প্রয়োজন <(...)। ইন ব্যাশ মূল সমাধান সরলীকৃত করা যেতে পারে $ echo foo | vim < /dev/tty <(cat)


এই দুটিই বিদ্যমান উত্তর বা নিজেই প্রশ্নে আচ্ছাদিত। এখানে নতুন কী?
مورু

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