এক বিভক্ত উইন্ডো থেকে অন্য পাঠাতে পাঠ্য প্রেরণ করুন


17

সম্প্রতি নিওভিমে একটি অ্যাড-অন ছিল যা ভিম বাফারে টার্মিনাল খোলার অনুমতি দেয়। এটির একটি ভিআইএম উইন্ডো থেকে অন্য প্রতিলিপিতে পাঠানোর জন্য আবেদনকারী সম্ভাবনা রয়েছে, উদাহরণস্বরূপ, আচরণের মতো একটি আরপিএল।

অতীতে আমি এই ধরণের কনফিগারেশনের জন্য tmux ব্যবহার করছিলাম। তবে এখন আমি কেবল নিওভিম ব্যবহার করে চেষ্টা করে দেখতে চাই।

আমার প্রশ্নটি হল - আমি কীভাবে একটি ভিএম বিভাজন থেকে অন্য একটিতে পাঠানো ব্লক পাঠাতে পারি? বা সম্ভবত এর চেয়েও - আমি কীভাবে পাঠ্য নির্বাচন, এটি ইয়ঙ্ক করা, বিভাজন পরিবর্তন এবং তারপরে পেস্টিংয়ের ক্রমটি স্বয়ংক্রিয় করতে পারি?

উত্তর:


15

মূলত আপনি যখন পাঠ্য নির্বাচন করেছেন, আপনি অনুলিপি করতে চান টীম টার্মিনাল, পেস্ট, এবং তারপরে সম্ভবত উইন্ডোজ পিছনে স্যুইচ করুন এবং পাঠ্য পুনরায় সন্ধান করতে। আপনার যদি দুটি স্প্লিট খোলা থাকে তবে এটির মতো দেখতে লাগবে:

vnoremap <F5> y<c-w>wp<c-w>pgv
"explanation:
xnoremap <F5>                   Remap F5 in visual/select mode (could be any key combo)
              y                 copy selected text
               <c-w>w           switch to next window
                     p          paste (for terminals this sends the text to the terminal)
                      <c-w>p    switch to previous window
                            gv  reselect

যদি আপনার পাঠ্যটি নির্বাচিত হওয়ার পরে যদি দুটিরও বেশি বিভাজন হয় এবং টার্মিনালটি না হয় তবে আপনি অন্যরকম ম্যাপিং ব্যবহার করতে চান যা আপনার লেআউটের জন্য কাজ করে (যেমন <c-w>tউপরের বাম উইন্ডোতে চলে আসে) অথবা আপনি চাইবেন একটি ফাংশন লিখতে যা সমস্ত উইন্ডোতে লুপ করে এবং সঠিকটি খুঁজে পায়।


আমি যা দেখতে পাচ্ছি তা থেকে, pটার্মিনাল বাফার ব্যবহার করে টার্মিনাল মোডে প্রবেশ করা যায় না, সুতরাং নিম্নলিখিতগুলি প্রয়োজনীয় <C-\><C-N>হওয়া উচিত নয়। (এটি বলেছিল, এটিও সম্পূর্ণ নিরীহ।)
tommcdo

@ টমমকডো ভাল কল, এখনও বৈশিষ্ট্যটি চেষ্টা করে দেখিনি তাই কেবল একটি শট নিচ্ছিল। আমি সেই অংশটি সরিয়ে ফেলব।
ম্যাট বোহেম

17

নিওভিম টার্মিনাল বাফারগুলির সর্বদা সম্পর্কিত জব আইডি থাকে, সুতরাং একটি উপায় হ'ল পাঠ্যটি প্রেরণ করার জন্য কাজের নিয়ন্ত্রণ API ব্যবহার করুন। এটি আপনার ভিআরসিআর-এ যুক্ত করুন:

augroup Terminal
  au!
  au TermOpen * let g:last_terminal_job_id = b:terminal_job_id
augroup END

যা শেষ তৈরি টার্মিনালের কাজের আইডি g:last_terminal_job_idভেরিয়েবলের মধ্যে সংরক্ষণ করবে । তারপরে আপনি কিছু ফাংশন / কমান্ড / ম্যাপিং তৈরি করতে পারেন যা jobsendফাংশনটি ব্যবহার করে ডেটা প্রেরণ করবে , এখানে একটি উদাহরণ রয়েছে:

function! REPLSend(lines)
  call jobsend(g:last_terminal_job_id, add(a:lines, ''))
endfunction

command! REPLSendLine call REPLSend([getline('.')])

nnoremap <silent> <f6> :REPLSendLine<cr>

উপরেরটি বর্তমান লাইনটি প্রেরণ করবে, তবে আপনি ভিজ্যুয়াল নির্বাচন প্রেরণে এটি প্রসারিত করতে পারেন।


2

নিওটর্ম হ'ল নেওভিমের জন্য একটি প্লাগইন যা এই উদ্দেশ্যে তৈরি করা হয়। এটি একটি নতুন কমান্ড প্রয়োগ করে :TREPLSendযা বর্তমান লাইনটি নেবে এবং এটি একটি টার্মিনাল উইন্ডোতে প্রেরণ করবে। বেসিক ব্যাশ এবং যে কোনও ভাষার রিপ্লের মোড রয়েছে তার জন্য সূক্ষ্ম কাজ করে।


0

এখানে উত্তরগুলির পাশাপাশি আমি এই উদ্দেশ্যে একটি প্লাগইন প্রয়োগ করেছি: vim-sendtowindow

এটি উইন্ডোতে প্রেরণকারী অপারেটর সরবরাহ করে যা সংলগ্ন উইন্ডোতে পাঠানোর জন্য পাঠ্য নির্বাচন করার জন্য যে কোনও ভিএম গতির সাথে একত্রিত হতে পারে। এছাড়াও এটি প্রেরিত পাঠ্যের পরে সহজেই কার্সারকে অবস্থান দেয় এবং ডট পুনরাবৃত্তিযোগ্য।

নীচে একটি ছোট উদাহরণ:

উদাহরণ

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