কমান্ড লাইন থেকে স্ট্যান্ডার্ড আউটপুটে পুরো বাফারটি কীভাবে লিখবেন?


10

আমি /dev/stdoutফাইলটির পরিবর্তে পুরো বাফারটিকে স্ট্যান্ডার্ড আউটপুট ( ) এ লিখতে চাই এবং ফাইল সম্পাদনা করার সময় নিম্নলিখিত কমান্ডটি প্রত্যাশা অনুযায়ী কাজ করে:

:w >> /dev/stdout

ইঙ্গিত: স্ক্রিনটি রিফ্রেশ করতে Control+ টিপুন L

কমান্ড লাইন ( আন্তঃ-ইন্টারেক্টিভভাবে ) থেকে একই কাজ করার চেষ্টা করার সময় এটি প্রত্যাশার মতো কার্যকর হয় না , উদাহরণস্বরূপ:

$ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!'
Vim: Reading from stdin...

সঙ্গে একই :w !tee, :x! /dev/stdout, :%printএবং অনুরূপ।

আগে প্রস্থান, এটি বলছে: [Device] 1L, 17C appended

পাইপের মাঝখানে স্ট্যান্ডার্ড ইনপুটটিতে স্ট্যান্ডার্ড ইনপুট লিখতে ভিএমকে বাধ্য করার কোনও উপায় আছে কি? হয়তো এটি কোনওভাবে বাফার?


4
শুধু কৌতূহলী, আপনি কী অর্জন করার চেষ্টা করছেন? যেমনটি রয়েছে, এখানে ভিএম আপনার জন্য কী করবে যাতে অন্য কোনও সরঞ্জাম নাও পেতে পারে?
জে থম্পসন

1
@ জয় টমসসন vimপরিবর্তে ফাইল পার্সিংয়ের জন্য আমি চেষ্টা করার চেষ্টা করছি sed(উদাহরণস্বরূপ একাধিক বড় ফাইলগুলিতে গণ পুনরাবৃত্তি জটিল পরিবর্তন)। উদাহরণটি সহজ রাখতে এবং অন্য কোনও পোস্টের সম্ভাব্য সদৃশ তৈরির জন্য কিছুই করে না ।
কেনারব

আপনি পাইপ সম্পর্কে জানেন, তাই কোনও কারণে আপনি এটি ব্যবহার করছেন না?
মুরু

@ মুরু আমি এটি এখনও ব্যবহার করি নি, খুব বেশি ডকুমেন্টেশন নেই এবং এটি এখানে অফ-টপিক
কেনারব

পাইপ সম্পর্কিত প্রশ্নগুলি হতে পারে তবে এর উত্তর হতে পারে না এমন কোনও কারণ নেই। সুতরাং আমি ভাবছি কেন এটি উত্তর হিসাবে পোস্ট করা উচিত নয়।
মুরু

উত্তর:


9

স্ট্যান্ডার্ড আউটপুটটি শেল করতে বাফারটি প্রিন্ট করতে vimপ্রাক্তন মোডে শুরু হওয়া দরকার, অন্যথায় এটি নিজস্ব উইন্ডো দিয়ে "সাধারণ" পথ খুলবে এবং প্রস্থান করার সময় কোনও আউটপুট বাফার সাফ করবে।

এখানে কাজ করার সহজতম উদাহরণ:

$ echo foo | vim -e '+%print' '+q!' /dev/stdin
foo

বা আরও ছোট:

$ echo foo | ex +%p -cq! /dev/stdin
$ echo foo | ex +"%p|q!" /dev/stdin

দ্রষ্টব্য: কমান্ডটি vim -eমূলত exকমান্ডের সমতুল্য ।

/dev/stdinঅতিরিক্ত বিরক্তিকর বার্তা (নীচে বর্ণিত হিসাবে ) প্রতিরোধ করার জন্য স্ট্যান্ডার্ড ইনপুটটিতে বিশেষ ফাইল বর্ণনাকারী নির্দিষ্ট করতে হবে ( )।


এবং এখানে পার্সিং স্ট্রিং সহ কয়েকটি উদাহরণ রয়েছে:

$ echo This is example. | vim -e '+s/example/test/g' '+%print' '+q!' /dev/stdin
This is test.
$ echo This is example. | vim - -es '+s/example/test/g' '+%print' '+q!'
Vim: Reading from stdin...
This is test.

দ্রষ্টব্য: শেষ উদাহরণটি অতিরিক্ত বিরক্তিকর বার্তাটি দেখায় যা এটি আড়াল করা সম্ভব নয়, কারণ এটি পুরো ফাইলটিকে মেমরির মধ্যে পড়ার এবং স্ট্যান্ডার্ড ইনপুট থেকে পড়ার কথা বলে। প্রথম উদাহরণটি বার্তা ছাড়াই কাজ করে, কারণ ফাইলটি একটি অফ-অফ-ফাইল ( ইওএফ ) সিগন্যাল ছাড়াই অন্তহীন ডেটা তৈরি করে , তাই এটি কখনই তার ইনপুট পাঠের শেষে পৌঁছাতে পারে না।


সম্পর্কিত:


1
আপনি ঠিক না, +q!বরং কি করতে পারেন +:q!?
অ্যান্ড্রু

@ অ্যান্ড্রুম্যাকএফআই এটি একই জিনিস, আপডেট হয়েছে, ধন্যবাদ।
কেনারব

3

vipeপাইপলাইন সম্পাদনা করার জন্য সুবিধাজনক সরঞ্জাম, moreutilsপ্যাকেজের অংশ । এটি সম্পাদকদের জন্য একটি মোড়ক ( viএটির নাম দেয় এটি সহ )। এটি ব্যবহার করে EDITORঅন্যান্য সরঞ্জাম যে ব্যবহার করতে মতো সম্পাদক সেট করতে, তাই, পরিবেশ পরিবর্তনশীল EDITOR(যেমন crontab, visudoইত্যাদি), আপনি যা করতে পারেন স্ক্রিপ্ট যে পরিবর্তনশীল ব্যবহার কর্ম। উদাহরণস্বরূপ, আপনি এটি করতে এটি পরিবর্তন করতে পারেন:

$ echo foo | EDITOR='vim +:s/foo/bar/ +wq' vipe | tail
bar

অবশ্যই, জটিল ক্রিয়াগুলি জাহান্নামের উদ্ধৃতি দিতে পারে, যাতে আপনি একটি স্ক্রিপ্ট লিখতে পারেন:

#! /bin/sh

vim "+:s/foo/bar" '+wq' "$@"

এবং ব্যবহার EDITOR="sh /path/to/script"

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