Vi এ এক ফাইল থেকে অন্য ফাইলটিতে সামগ্রী অনুলিপি করুন এবং আটকান


256

আমি দুটি ফাইল নিয়ে কাজ করছি এবং আমার একটি ফাইল থেকে কয়েকটি লাইন অনুলিপি করতে হবে এবং অন্য একটি ফাইলে পেস্ট করতে হবে। আমি জানি কীভাবে (yy) অনুলিপি করতে হবে এবং একই ফাইলটিতে (পি) আটকানো হবে। তবে এটি বিভিন্ন ফাইলের জন্য কাজ করে না। এটি কিভাবে হয়?

এছাড়াও, কাটা-পেস্ট করার কোনও উপায় আছে? আমি গুগল করার চেষ্টা করেছি, তবে বেশিরভাগ সংস্থানগুলি কেবল অনুলিপি-পেস্ট সম্পর্কেই কথা বলে।


আপনি কি নিশ্চিত যে এটি কাজ করে না? আমি এটি প্রায়শই ফাইলগুলির মধ্যে লাইনগুলি অনুলিপি করতে ব্যবহার করি।
sjngm

আচ্ছা আমি যখন এটি করছি, আমি কেবল একটি উদ্ধৃতি চিহ্ন পাই?
মাচা

4
কমান্ড ডিডি কাট মত কাজ করে।
মার্টিন স্টলবার্গ

উত্তর:


218

যেহেতু আপনি ইতিমধ্যে টেক্সট কেটে / ইয়াঙ্ক করতে জানেন তাই এটি অন্য ফাইলে পেস্ট করার জন্য কয়েকটি ধারণা এখানে রইল:

  • আপনি যে পাঠ্যটি চান তা ইঙ্ক করে প্রথম ফাইলটি সম্পাদনা করুন। তারপরে আপনার দ্বিতীয় ফাইলটি vi ( :e /path/to/other/file) এর মধ্যে থেকে খুলুন এবং এটি আটকে দিন
  • উভয় ফাইল একসাথে বিভক্ত উইন্ডোতে খুলুন এবং তাদের মধ্যে Ctrl+ w, Up/ Downঅথবা এর মাধ্যমে নেভিগেট করুন :

    • vi -o /path/to/file1 /path/to/file2
    • প্রথম ফাইলের মধ্যে থেকে, Ctrl+ w,s

আমার দুটি পুটি উইন্ডো খোলা আছে, আমি প্রথমে ভিজ্যুয়াল মোডের জন্য "ভি" করছি এবং তারপরে সমস্ত লাইন এবং ইয়েঙ্কিংয়ের জন্য "y" করুন, অন্য ফাইলটিতে যাওয়ার জন্য আমি কোনও Alt + ট্যাব করছি না এবং যখন করি একটি "পি" রাখার জন্য, এটি কেবল একটি উদ্ধৃতি চিহ্ন প্রিন্ট করে
macha

10
আপনি যদি 2 পুট্টি উইন্ডো নিয়ে কাজ করছেন তবে আপনাকে কপি / পেস্ট করার জন্য পুট্টি / উইন্ডোজ উপায়টি ব্যবহার করতে হবে। এটা সহজ. আপনার মাউসের সাহায্যে আপনি যে জিনিসটি অনুলিপি করতে চান তা চিহ্নিত করুন (আপনার আর কিছুই করার দরকার নেই, চিহ্নিত চিহ্নটি পাঠ্যটি এখন ক্লিপবোর্ডে অনুলিপি করা হয়েছে)) আপনার অন্যান্য পুট্টি উইন্ডোতে স্যুইচ করুন। ভিমে সন্নিবেশ মোডটি প্রবেশ করান (i চাপুন)। ডান মাউস বোতামটি হিট করুন - পুট্টি উইন্ডোতে ডান মাউস ক্লিপবোর্ডে যা আছে তা পেস্ট করবে।
টি

3
আপনি যা করছেন তা কার্যকর হবে না: vi এ ইয়াঙ্কিং পাঠ্যগুলি আপনার উইন্ডোজ ক্লিপবোর্ডে রাখবে না, এবং ইয়াঙ্ক বাফারটি ওপেন ভিএম দৃষ্টান্তের মধ্যে ভাগ করা হবে না।
অ্যাডাম বাটকিন

1
প্রথম ফাইলটি মধ্যে থেকে *,: আমি বুঝি না কি শেষ বিন্দু করতে অনুমিত হয় Ctrl+ + w, s
সোভাসার

1
আমার জন্য এটি উইন্ডো বিভক্ত কিন্তু ঠিক একই ফাইলটি খোলার। তখন কোন ফাইলটি খুলতে হবে তা আপনি কীভাবে চয়ন করবেন? আমি কমান্ডটি দেখেছি যা :sp myfileঅনুভূমিকভাবে বিভক্ত হবে এবং নির্দিষ্ট ফাইলটি খুলবে, তবে আমি কী করব যদি আমি উইন্ডোটিকে উল্লম্বভাবে বিভক্ত করতে পছন্দ করি?
সুইসারের

50

আপনি যদি উইন্ডোজে ভিম ব্যবহার করে থাকেন তবে ক্লিপবোর্ডে (এমএস কপি / পেস্ট) অ্যাক্সেস পেতে পারেন:

"*dd - একটি লাইন কেটে (বা তিন লাইন কাটতে 3 ডিডি)

"*yy - একটি লাইন অনুলিপি করুন (বা তিন লাইন অনুলিপি করতে 3 মাস)

"*p - কার্সারের পরে লাইনে লাইন (গুলি) আটকে দিন

"*P - কার্সারের আগে লাইনে লাইন (গুলি) আটকে দিন

আপনাকে আলাদা Vim উইন্ডো বা Vim এবং PC অ্যাপ্লিকেশনগুলির মধ্যে ( নোটপ্যাড , মাইক্রোসফ্ট ওয়ার্ড ইত্যাদি) পেস্ট করতে দেয় paste


17
+ক্রস-প্ল্যাটফর্ম সিস্টেম ক্লিপবোর্ড রেজিস্ট্রার (উইন্ডোজ এবং লিনাক্স) বনাম হিসাবে ব্যবহার করুন *, যা কেবল উইন্ডোজ ( +উইন্ডোজ হিসাবে ঠিক একইভাবে কাজ করে *)।
স্টিফেন সোয়েনসেন

42

কাটা dপছন্দ মত বিভিন্নতা ব্যবহার করুন dd

অন্য কোনও ফাইলে রেখার ব্যাপ্তি লিখতে আপনি ব্যবহার করতে পারেন:

:<n>,<m> w filename

কোথায় <n>এবং <m>এমন সংখ্যা (বা প্রতীক) যা বিভিন্ন রেখাকে নির্দিষ্ট করে দেয়।

ডেস্কটপ ক্লিপবোর্ড ব্যবহার করার জন্য, +gকমান্ডগুলি একবার দেখুন ।


চিহ্ন দিয়ে এই কাজের জন্য, দুই নম্বরের (a ও b, উদাহরণস্বরূপ) টেক্সট প্রায় আপনি একটি ফাইল লিখতে চাই তৈরি করুন: প্রথম লাইন এ যান; maগত লাইন সরানো, mb। তারপরে 'আপনি উপরের কমান্ডটি ব্যবহার করার সময় চিহ্নের চিঠির জন্য একটি :'a,'b w filename
প্রিপেন্ড করুন

প্রশস্ত লাইন রেঞ্জ জন্য দুর্দান্ত সমাধান!
ইয়াসিন ওকুমুş

29

আপনি অন্য ফাইলটি খুলতে এবং টাইপ করতে পারেন :r file_to_be_copied_from। অথবা আপনি বাফার করতে পারেন। অথবা প্রথম ফাইলে যান, আপনি যে লাইনে অনুলিপি করতে চান তা লিখুন "qY, টাইপ করুন , যে ফাইলটি আপনি পেস্ট করতে চান এবং টাইপ করতে চান তাতে যান "qP

"বাফার নাম, বাফারে অনুলিপি। Yইয়াঙ্ক এবং Pকরা হয়। আশা করি এইটি কাজ করবে!


ধন্যবাদ! এটি আমাকে
টনকে

28

এটি করার একটি উপায় এখানে;

  • ভিম শুরু করুন এবং ফাইল 1 খুলুন যা আপনি যে ফাইলটিতে কাজ করছেন।
  • :e ফাইল 2 যা ফাইল 2 আনবে, আপনি যে ফাইলটি লাইনগুলি অনুলিপি করতে চান তা আনবে।
  • আপনি অনুলিপি করতে চান লাইন সনাক্ত করুন। যদি এটি তিনটি লাইন হয় তবে আপনি আঘাত করবেন3yy
  • :b1 এটি বাফার 1 এ স্যুইচ করবে, যেখানে ফাইল 1 রয়েছে
  • আপনি যে লাইনগুলি ইয়াঙ্কড করেছিলেন সেগুলি কোথায় সন্নিবেশ করতে চান তা চিহ্নিত করুন এবং হিট করুন p

আপনি উভয় ফাইল দেখতে পারা যেতে পারে। যেমন Ctrl+ সহ স্ক্রিনটি বিভক্ত করুন w s

কাটা কাটা, dকাটা জিনিসগুলি ইয়াঙ্ক বাফারে রেখে দেয় in ddএকটি লাইন "কাটা" হবে


2
অফ-টপিক: কী-বোর্ড-বোতামের মতো জিনিসগুলি কীভাবে পাব?
22 এ 22


দুটি ফাইল দুটি ভিন্ন ভিন্ন ssh সার্ভারে রয়েছে, যা একই ক্লায়েন্ট লিনাক্স / ম্যাকোসের দুটি পৃথক টার্মিনালগুলিতে ssh'es করে? মানে, কোনও পুট্টি ব্যবহার করার নেই, এবং দুটি ফাইল একই টার্মিনালে একই vi সেশনে খোলা যাবে না।
কিউয়াং সিউ

1
ক্লায়েন্ট যদি দুটি সার্ভারে প্রবেশ করতে পারে তবে এটি দুটি সার্ভারে স্ক্যাপ বা এসএফপি ব্যবহার করতে পারে। সুতরাং দ্রুততম উপায় হ'ল ফাইলটি কেবল একটি সার্ভার থেকে অন্য সার্ভারে অনুলিপি করা যাতে তারা একই সার্ভারে থাকে, বর্ণিত হিসাবে সেই ফাইলগুলি সম্পাদনা করে এবং আপনার প্রয়োজন হলে ফাইলটি অন্য সার্ভারে ফিরে অনুলিপি করে।
সংখ্যা

16

এগুলি সমস্ত দুর্দান্ত পরামর্শ, তবে আপনি যদি অন্য কোনও ফাইলের পাঠ্যের অবস্থান জানেন তবে সহজেই সেড ব্যবহার করুন। :r! sed -n '1,10 p' < input_file.txtএটি কার্সারের বর্তমান অবস্থানে ইতিমধ্যে একটি উন্মুক্ত ফাইলে 10 টি লাইন সন্নিবেশ করবে।


অদ্ভুতভাবে আমি 1 এর একটি প্রস্থান কোড পেয়েছি যখন ওএস এক্স এ দুর্ভাগ্যজনকভাবে এটি চালাচ্ছি কেন তা নিশ্চিত নয়।
jayunit100

1
এই পরামর্শের জন্য ধন্যবাদ! আমি শেডের পরিবর্তে মাথা ব্যবহার করলাম কারণ আমি প্রথম দুটি লাইন চেয়েছিলাম::r ! head -n2 file.py
ফেডেরিকো পঞ্জি

7

ফাইলটি সম্পাদনার সময়, আপনি যেখানে শুরু এবং শেষটি ব্যবহার করতে চান তা চিহ্নিত করুন

ma- aচিহ্ন সেট করে

mb- bচিহ্ন সেট করে

তারপরে, এটি অন্য কোনও ফাইলে অনুলিপি করতে, কেবল wকমান্ডটি ব্যবহার করুন :

:'a,'bw /name/of/output/file.txt

7

2017-05 আপডেট:

আমি সবেমাত্র পেয়েছি যে আপনি যদি আপনার ভিএমআরসি ফাইলে নিম্নলিখিত লাইনটি যুক্ত করেন,

ক্লিপবোর্ড সেট করুন = নামবিহীন

তারপরে ভিম সিস্টেম ক্লিপবোর্ড ব্যবহার করছে।


আমি সন্ধান পেয়েছি যে ইয়ঙ্ক উপায়টি যেভাবে আমি বিভিন্ন ভিম উদাহরণ উইন্ডোর মধ্যে বিষয়বস্তু অনুলিপি করে সেখানে কাজ করবে না। (কমপক্ষে, এটি আমার ভিম জ্ঞানের উপর ভিত্তি করে কাজ করে না it এটি কাজ করার সক্ষম করার জন্য অন্য কোনও উপায় আছে কিনা তা আমি জানি না)।

ইয়াঙ্ক উপায়টি কেবল সেই পথেই কাজ করে যেখানে আমার পরীক্ষা অনুযায়ী একই উইন্ডোতে একাধিক ফাইল খোলা হয়।

যদি আপনি এটি করতে চান তবে আপনি ওএস কাট-কপি-অতীতের উপায় যেমন Ctrl+ x, Ctrl+ c(উইন্ডোজের অধীনে) ব্যবহার করতে পারেন।


5

এই রিম্পসগুলি আমার জন্য কবজির মতো কাজ করে:

vmap <C-c> "*y     " Yank current selection into system clipboard
nmap <C-c> "*Y     " Yank current line into system clipboard (if nothing is selected)
nmap <C-v> "*p     " Paste from system clipboard

সুতরাং, যখন আমি ভিজ্যুয়াল মোডে থাকি, আমি যে লাইনগুলি চাই তা নির্বাচন করি এবং রিসিভার ফাইলটিতে পাঠ্য সন্নিবেশ করতে Ctrl+ cএবং তারপরে Ctrl+ টিপুন v। আপনি "* y" ব্যবহার করতে পারেন তবে আমার মনে হয় এটি কখনও কখনও মনে রাখা খুব কঠিন।

এটি ভিম থেকে ক্লিপবোর্ডে পাঠ্য অনুলিপি করতেও দরকারী।

উত্স: একটি অস্থায়ী ফাইল ব্যবহার করে সেশনগুলির মধ্যে অনুলিপি করুন এবং আটকান


4

ভিমের একই উদাহরণে খোলা দুটি বাফার (== ফাইল) এর মধ্যে পাঠ্য অনুলিপি করা কোনও সমস্যা নয়:

কেবল একটি বাফারে ইয়াঙ্ক করুন y(ধরে নিলে আপনি ভিজ্যুয়াল মোডে একটি অনুলিপি অঞ্চল চিহ্নিত করেছেন) এবং তারপরে অন্য বাফারে পেস্ট করুন p। এটি যতক্ষণ না ভিমের একই উদাহরণে থাকে ততক্ষণ তা বিভিন্ন ট্যাবের সাথে কাজ করে works

ভিমের একই উদাহরণে দুটি ফাইল কীভাবে খুলবেন তা আপনার সিস্টেমে নির্ভর করে:

  • উইন 32-এ, প্রসঙ্গ মেনুতে একটি বিকল্প রয়েছে যা বলছে যদি আপনি দুটি বা ততোধিক ফাইল নির্বাচন করেন তবে একটি ভিমে দিয়ে সম্পাদনা করুন
  • আপনি যখন কনসোলে থাকবেন, আপনি এটি দিয়ে এটি অর্জন করতে পারেন vim file1 file2
  • আপনি যদি অন্য কোনও সরঞ্জামের জন্য ভিএমকে সম্পাদক হিসাবে ব্যবহার --remote-silentকরেন তবে একই ফাইলের সমস্ত ফাইল খোলার বিষয়টি নিশ্চিত করার জন্য বিকল্পটি নির্দিষ্ট করতে ভুলবেন না

আপনি যদি ভিমের দুটি পৃথক ক্ষেত্রে দুটি ফাইল খোলেন, তবে আপনাকে সিস্টেম ক্লিপবোর্ডের সাথে যেতে হবে: প্রথম Vim উদাহরণস্বরূপ, সিস্টেম ক্লিপবোর্ডে টেক্সটটি ইঙ্ক করে "+y(আবার, অঞ্চলটি ভিজ্যুয়াল মোডে ইয়ঙ্ক করার জন্য চিহ্নিত করুন) ), তারপর দ্বিতীয় তেজ যান এবং সেখান ক্লিপবোর্ড আটকান: "+p


: tabedit ফাইলের নাম খোলা লক্ষ্য ফাইল এবং তারপর ব্যবহার করা যেতে পারে পি আপনার লাইন পেস্ট করতে। আমি মনে করি এটি দ্রুত।
যাবলভ

4

লক্ষ্য : একটি ফাইলের একটি টুকরো অন্য ফাইলে সংরক্ষণ করুন।

সমাধান :

  1. আপনি যে পাঠ্যটি সংরক্ষণ করতে চান তা নির্বাচন করুন:
    • আপনি যেখানে নির্বাচন শুরু করতে চান সেখানে কার্সারটি অবস্থান করুন
    • vঅক্ষর নির্বাচন করতে টিপুন বা Vপুরো লাইন নির্বাচন করতে বড় হাতের অক্ষর
    • আপনি যা নির্বাচন করতে চান তার শেষে কার্সারটি সরান
  2. নির্বাচিত পাঠ্যটি নতুন ফাইলে সংরক্ষণ করুন। টাইপ করুন :wSpaceএবং নতুন ফাইলের নাম। আসলে আপনি দেখতে পাবেন

    :'<,'>w new.txt

    তারপরে টিপুন Enter


টেম্প ফাইল থেকে কীভাবে পেস্ট করবেন??
ভিনিতে

3

আমার পরিস্থিতিটি হ'ল আমাকে ফাইল 1 থেকে ফাইল 2 তে মাঝারি, অজানা, লাইন সংখ্যাগুলি অনুলিপি করতে হবে।

:'a,'bw /name/of/output/file.txt

2
  1. ক্লিপবোর্ড সমর্থন সহ আপনার ভিম সংস্করণ সংকলিত আছে তা নিশ্চিত করুন
    • :echo has('clipboard') ফিরে আসা উচিত 1
    • যদি এটি ফিরে আসে 0(উদাহরণস্বরূপ ম্যাক ওএস এক্স, কমপক্ষে v10.11 (এল ক্যাপিটান), ভি 10.9 (ম্যাভেরিক্স) এবং ভি 10.8 (মাউন্টেন সিংহ) - একটি ভিম সংস্করণ সহ ক্লিপবোর্ড সমর্থন না করে আসে) আপনাকে একটি ইনস্টল করতে হবে ক্লিপবোর্ড সমর্থন সহ ভার্সন সংস্করণ, এর মাধ্যমে বলুন brew install vim(ইনস্টলেশনের পরে আপনার টার্মিনালটি পুনরায় চালু করতে ভুলবেন না)
  2. একটি ভিজ্যুয়াল মোড লিখুন ( V- একাধিক, v- সরল, বা Ctrlv- ব্লক-ভিজ্যুয়াল)
  3. আপনি অনুলিপি করতে চান এমন লাইন নির্বাচন করুন
  4. "*y - নির্বাচিত অনুলিপি করতে
  5. "*p - অনুলিপি করা

পুনশ্চ:

  • আপনি পদক্ষেপ প্রতিস্থাপন করতে পারেন 2-5 থেকে নির্দেশাবলী সহ উত্তর দ্বারা JayG যদি আপনি অনুলিপি করেন এবং একটি একক লাইন পেস্ট করতে হবে,
  • লাইন নির্বাচন আরাম, আপনি যোগ করতে পারেন set mouse+=aআপনার টু .vimrc- যখন বিদেশী উপাদানের (লাইন নম্বর, ইত্যাদি) নির্বাচন না আপনি মাউসের সাহায্যে তেজ মধ্যে লাইন নির্বাচন করতে অনুমতি দেবে বিজ্ঞপ্তি: এটি মাউস-নির্বাচিত টেক্সট কপি করার ক্ষমতা অবরুদ্ধ করবে Vim থেকে সিস্টেম ক্লিপবোর্ডে

1

উদাহরণ: ফাইলএ এবং ফাইলবি - 25 লাইনে ফাইলএতে শুরু করুন, 50 টি লাইন অনুলিপি করুন এবং ফাইলবিতে পেস্ট করুন

fileA

Goto 25th line

25G

copy 50 lines into buffer v

"v50yy

Goto fileB

:e fileB

Goto line 10

10G    

paste contents of buffer v
"vp

1

নীচের বিকল্পটি বেশিরভাগ সময় কাজ করে এবং পরে আটকানোর জন্যও।

 "xnyy
x - buffer name
n - number of line to Yank - optional

ইয়্যাঙ্ক করা লাইনগুলি বাফারে সংরক্ষণ করা হবে 'x'। এটি সম্পাদনার যে কোনও জায়গায় ব্যবহার করা যেতে পারে।

অন্য ফাইলে লাইন (গুলি) আটকানো,

:e filename&location

উদাহরণ: বর্তমান সম্পাদনায় নীচের কমান্ডটি টাইপ করুন

:e /u/test/Test2.sh
and paste using "xP
P - before cursor
p - after cursor

সম্পূর্ণ অপারেশন

ফাইল 1 খুলুন:

vi Test1.sh

a10yy

-Yanked 10 lines

- এখনকার সম্পাদনা থেকে দ্বিতীয় ফাইলটি খুলুন

*:e /u/test/Test2.sh*

আপনি যে লাইনে পেস্ট করতে হবে সেখানে কার্সারটি সরান

*"ap*

- বাফার থেকে লাইনগুলি '*a*'বর্তমান কার্সার পোস্টের পরে অনুলিপি করা হবে


1

আপনি যদি কোনও ফাইলের কোনও অংশ অনুলিপি করতে চান এবং সেই সামগ্রীটি অন্য কোনও ফাইলের মাঝখানে পেস্ট করতে চান তবে আপনি এইভাবে করতে পারেন।

:linenumber,linenumber write newfile

উদাহরণ:

:2,34 write temp1

অথবা

:'mark, 'mark write newfile

উদাহরণ:

:'a,'b write temp1

এখন লাইনগুলি অন্য একটি ফাইলে অনুলিপি করা হয়েছে। অনুলিপি করার পরে যদি আপনি এই লাইনগুলি মুছতে চান তবে আপনি এটি করতে পারেন

:linenumber1,linenumber2 d

অথবা

:'mark1,'mark2 d

এখন, অন্য ফাইল যান। তারপরে আপনি যে লাইনে পেস্ট করতে চেয়েছিলেন সেখানে কার্সারটি রাখুন।

আদর্শ

:r!cat temp1

এখন, টেম্প ফাইলের বিষয়বস্তু এখানে আটকানো হয়েছে। সামগ্রীটি আটকানোর পরে আপনি কমান্ড লাইন থেকে টেম্প ফাইলটি মুছতে পারেন।

:!rm temp1

আপনি যদি বেশ কয়েকবার অনুলিপি করতে চান তবে এটি সহায়তা করবে help


0

আর একটি উপায় হ'ল দুটি ফাইল দুটি বিভক্ত বাফারে খুলতে এবং আগ্রহের রেখাগুলির ভিজ্যুয়াল নির্বাচনের পরে নিম্নলিখিত "স্নিপেট" ব্যবহার করা যেতে পারে।

:vnoremap <F4> :y<CR><C-W>Wr<Esc>p

0

কমান্ড মোড প্রবেশ করুন এবং রান করুন

:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from

যেমন লাইন বের করে আনতে 20-30থেকে filenameবর্তমানে খোলা ফাইলে

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