পেস্ট বিকল্প সেট করুন, তবে কেবল একটি প্রবেশের জন্য for


16

আমি ভিএম 'paste'বিকল্পটি সেট করার , কিছু পাঠ্য সন্নিবেশ করানোর এবং পূর্ববর্তী মানটিতে ফিরে যাওয়ার দ্রুত উপায় পেতে চাই 'paste'

একটি সাধারণ ব্যবহারের ক্ষেত্রে ওএস ক্লিপবোর্ড সামগ্রীটি অক্ষরে অক্ষরে sertোকান, সক্রিয় হতে পারে এমন কোনও সন্নিবেশ মোড পুনর্লিখনকে বিবেচনা না করে যেমন স্বয়ংক্রিয় ইন্ডেন্টেশন এবং ভিমের অবস্থা পরিবর্তন না করে। আর একটি ব্যবহারের ক্ষেত্রে হ'ল একটি ওএস ম্যাক্রো বৈশিষ্ট্যটি ভিমের মধ্যে কীস্ট্রোকগুলি ইনজেক্ট করার অনুমতি দেওয়া এবং এগুলিকে আক্ষরিক পাঠ্য হিসাবে ব্যাখ্যা করা।

এটি স্পষ্টতই অন্যান্য বিকল্পগুলিতে সাধারণীকরণ করে - সাধারণ ধারণাটি কিছু বিকল্প সেট করে থাকে তবে কেবল সন্নিবেশ মোডের মাধ্যমে একটি ট্রিপের সময়কালের জন্য।

মূলত আমি _iএকটি ম্যাক্রোর সাথে একটি মূল ক্রমিক (বলি ) বাঁধতে চাই যা এটি করে that

:set paste
i…<Esc>
:set nopaste

যেখানে i…<Esc>আমি বলতে চাইছি সন্নিবেশ মোডে স্যুইচ করুন ( iকমান্ডের মতো) এবং কমান্ড মোডে ফিরে আসার পরে ম্যাক্রোটি পুনরায় শুরু করুন, তা বাদে আমি 'paste'যদি ইতিমধ্যে সক্রিয় থাকি তবে এখনও অ্যাক্টিভের সাথে শেষ করতে চাই । কিভাবে আমি এটি করতে পারব?

দ্রষ্টব্য: ওএস ক্লিপবোর্ডের সামগ্রীটি "*রেজিস্ট্রারে ম্যাপ করা আছে । যখন এটি কাজ করে, 'paste'বিকল্পটি খুব কার্যকর নয়। এই প্রশ্নের প্রেরণাদায়ক পরিস্থিতি সেই সময়গুলির জন্য যখন "*রেজিস্টার সহায়তার শর্তাদি পূরণ করা হয় না - ভিম +xterm_clipboardবৈশিষ্ট্যটি সংকলন করা হয় না , বা এটি স্ক্রিন বা এসএসএইচের মতো টার্মিনালে চলছে যা এটি পরিবেষ্টিত এক্স সার্ভার থেকে পৃথক করে দেয়।


1
আমি আপনার প্রশ্নটি পছন্দ করি (আমি নিজে অনেকবার সেখানে এসেছি)। তবে, নিবন্ধন +বা *রেজিস্টার থেকে পেস্ট করা সহজ নয় ?
ইয়ো '

@yo ' কেবল তখনই তারা কাজ করবে । যা আমার ভিমের ব্যবহারের জন্য প্রায়শই হয় না।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

উত্তর:


15

একবার চেষ্টা করে দেখুন:

function! Paste_Func()
    let s:inPaste = &paste
    if !s:inPaste
        set paste
    endif

    echom s:inPaste
    augroup paste_callback
        autocmd!
        autocmd InsertLeave <buffer> call Paste_End()
    augroup END

    startinsert
endfunction

function! Paste_End()
    augroup paste_callback
        autocmd!
    augroup END
    augroup! paste_callback

    if !s:inPaste
        set nopaste
    endif
endfunction

map _i :call Paste_Func()<cr>

এটি আপনার বর্তমান পেস্টের স্থিতি ইনপ্যাসেটি ভেরিয়েবলে সঞ্চয় করে এবং এটি ইতিমধ্যে সেট না করা থাকলে পেস্ট সেট করে। তারপরে আপনি যখন সন্নিবেশ মোডটি ছেড়ে যান তখন এটি একটি স্বতঃসিএমডি সেট আপ করে এবং তারপরে আপনাকে সন্নিবেশ মোডে রাখে।

আপনি যখন সন্নিবেশ মোডটি ছেড়ে যান এটি অটোকিমডিটি চালায়, যা প্রথমে অটোকএমডি সরিয়ে দেয় (সুতরাং আপনি সন্নিবেশ মোডটি অন্য কোনও উপায়ে ছাড়লে এটি চালিত হয় না) এবং অবশেষে নোপস্ট সেট করে যদি আপনি মূলত পেস্ট মোডে না থাকেন।

এছাড়াও, আপনি যদি কোনও টার্মিনালে ভিএম ব্যবহার করছেন, আপনি ভিআইএম-বন্ধনীযুক্ত-পেস্টটি একবার দেখতে পারেন , যা আপনি বেশ কয়েকটি টার্মিনাল এমুলেটর দ্বারা সরবরাহ করা বন্ধনীযুক্ত পেস্ট মোড বৈশিষ্ট্যটি ব্যবহার করে যদি আপনি মোডটি আটকানো হয় এবং স্বয়ংক্রিয়ভাবে মোড সেট করে থাকেন তা সনাক্ত করতে পারে।

সম্পাদনা: স্ক্রিপ্ট স্থির


এটি সঠিক ট্র্যাকটিতে মনে হচ্ছে (বিশেষত, আমার কাছে সাধারণ ব্র্যান্ড কমান্ড দ্বারা সন্নিবেশের প্রসারকে "বন্ধনী" করার কোনও ধারণা ছিল না)। ধন্যবাদ। তবে এটি পুরোপুরি সঠিক নয় এবং সমস্যাটি কোথায় তা আমি দেখতে পাচ্ছি না: পরে _i, pasteবিকল্পটি বন্ধ থাকলেও আগে তা চালু ছিল।
গিলস 21'16

তুমি ঠিক! আমি নিশ্চিত যে আমি এটি পরীক্ষা করেছিলাম, তবে আমার অবশ্যই কিছু পরিবর্তন হয়েছে। আমি পোস্টে স্ক্রিপ্ট আপডেট করেছি, দেখুন এখন এটি আপনার জন্য কাজ করছে কিনা।
চাদ

4

এটি বাদে আমি 'paste'যদি ইতিমধ্যে সক্রিয় থাকি তবে এখনও সক্রিয় সাথে শেষ করতে চাই ।

'paste'যথাসম্ভব স্বল্প সময়ের জন্য সক্রিয় থাকা উচিত। এটি অনেকগুলি কার্যকারিতা (মানচিত্র সহ) অক্ষম করে, কারণ এর একমাত্র উদ্দেশ্য হ'ল পাঠ্যকে ভুলভাবে ব্যাখ্যা করা এড়ানো। যেমনটি, আমি মনে করি উদ্ধৃত প্রয়োজনের সত্যই প্রয়োজন হওয়া উচিত নয়।

এটি বলা হচ্ছে, সেট করার প্রয়োজন ছাড়াই এটি পেস্ট করা বেশ সহজ 'paste'। আপনি যদি gvim চালাচ্ছেন বা +xterm_clipboardকনসোল ভিমে রেখেছেন তবে আপনি কেবল "+pওএস ক্লিপবোর্ড থেকে পেস্ট করতে পারেন ।

পেস্ট করার সময় স্বয়ংক্রিয় ইন্ডেন্টেশনের সমস্যাটি কেবলমাত্র দুটি পরিস্থিতিতে ঘটে। সন্নিবেশ মোডে থাকাকালীন একটি নিবন্ধের বিষয়বস্তু সন্নিবেশ করানো ( <C-r>+) বা মাউসটির সাথে মিডল ক্লিক ক্লিক করে আটকানো।

সন্নিবেশ মোডে থাকা অবস্থায় কোনও নিবন্ধের বিষয়বস্তু সন্নিবেশ করানোর পরিবর্তে, সাধারণ মোডে রেজিস্টার থেকে আটকানো পুনরায় ফর্মটিং সমস্যাটি এড়াতে পারে।

আপনি যদি মাউস দিয়ে মাঝখানের ক্লিকের পেস্ট করতে চান, তবে 'mouse'টার্মিনালের পরিবর্তে, ভিমকে মাঝারি ক্লিকটি পরিচালনা করতে বিকল্পটি ব্যবহার করুন। ভিম তারপরে পাঠ্যগুলি টাইপ করা হিসাবে ব্যাখ্যা করার পরিবর্তে সামগ্রীগুলি আক্ষরিকভাবে প্রবেশ করিয়ে দেবে।


2
এর কোনোটাই আমার প্রশ্নের উত্তর দেয় না। আমি একটি কারণে স্পষ্ট প্রয়োজনীয়তা রাখা! সাধারণত 'paste'প্রকৃতপক্ষে আগেই সক্রিয় থাকে না, তবে আমি এটি সম্পর্কে ভাবতে চাই না। আমি প্রায়শই এমন ভিমে কাজ করি যা এক্স ক্লিপবোর্ড বা মাউস অ্যাক্সেস পায় না, কারণ আমার ভিম বিল্ডের xterm_clipboardবৈশিষ্ট্যটি নেই, বা কারণ আমি কাজ করছি যেমন একটি স্ক্রিন সেশন যা বর্তমানে কোনও সংযুক্ত থাকার সাথে দেখা হয় happens এক্স টার্মিনাল
গিলস 17'30

@ গিলস তারপরে আপনি কীভাবে পেষ্ট করছেন তা আপনি ব্যাখ্যা করতে পারেন? এমন একটি উত্তর সরবরাহ করতে সক্ষম হওয়ার জন্য এটি প্রাসঙ্গিক তথ্য যা আপনি যা করতে চান তা দিয়ে সেই ক্রিয়াটি মোড়ানো করতে পারে।
জামেসান

1
আমার মৌলিক ব্যবহারের ক্ষেত্রে হ'ল মাঝের মাউস বোতামটি দিয়ে বা শিফ্ট + sertোকানো দিয়ে পেস্ট করা। যদিও এটি সত্যিই প্রাসঙ্গিক নয়: প্রশ্নের মূলটি হ'ল কীভাবে কোনও বিকল্প সেট করা যায়, সন্নিবেশ মোডে স্যুইচ করুন (এর সাথে iআমি কীভাবে এটি প্যারাম্যাট্রাইজ করতে হয় তা জিজ্ঞাসা করছি না) এবং সন্নিবেশ মোড থেকে ফিরে আসার পরে বিকল্পটির মান পুনরুদ্ধার করুন।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

1
@ গিলিস এই মন্তব্যে বর্ণিত আপনার প্রশ্নের মূলটি আপনার মূল প্রশ্নের চেয়ে আমার কাছে আরও স্পষ্ট। ধন্যবাদ।
জামেসান

1
@Gilles এটা সাথে প্রাসঙ্গিক নয় আপনি , কিন্তু এটা ভবিষ্যতে দর্শকদের প্রাসঙ্গিক হতে পারে। সুতরাং হয় আপনি নিজেই প্রশ্নটিতে এটি রাখতে পারেন ("আমি জানি যে আমি ক্লিপবোর্ডগুলি ব্যবহার করতে "*pবা "+pপেস্ট করতে পারি তবে আমি সিস্টেমের পেস্টের ক্ষমতাগুলি ব্যবহার করতে চাই না") এবং তারপরে এই উত্তরটি অপ্রয়োজনীয়। অথবা আপনি তা করেন না, এবং তারপরে আমার মনে হয় এই উত্তরটির এখানে জায়গা আছে।
ইয়ো '

4

ব্যক্তিগতভাবে, আমি ঠিক এই কারণে yoটিম পোপের দুর্দান্ত ভিআইএম-অবিবাহিত প্লাগইন থেকে কী - বাইন্ডিংটি ব্যবহার করি । তার ডকুমেন্টেশন থেকে:

'পেস্ট' করার জন্য একটি টগল সরবরাহ করা হয়নি কারণ একাকীকরণ সন্নিবেশ মোড়ানোর সাধারণ ব্যবহারের ক্ষেত্রে এতটাই অপচয় হ'ল: আপনি দুবার টগল করেছেন তবে আপনি কেবল একবার (YOPO) পেস্ট করবেন। পরিবর্তে, টিপুন yoবা yOঅনুরোধ করতে |o|বা |O|ইতিমধ্যে সেট করা 'পেস্ট' দিয়ে। Sertোকানো মোডটি স্বয়ংক্রিয়ভাবে 'নোপস্টে' সেট করে।

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


1

লিনাক্স বা Mac এ তেজ 8+, আপনি এখন কেবল টার্মিনাল এর নেটিভ পেস্ট (যেমন মাঝখানের মাউস বাটন ব্যবহার ব্যবহার করতে পারেন ctrl+shift+V, Gnome এ, cmd+VMac এ) যদি টার্মিনাল সমর্থন বন্ধনী করা পেস্ট। iসন্নিবেশ মোডের জন্য টিপুন না ।

এটি স্বয়ংক্রিয়তা যোগ না করে ফাঁকা স্থান এবং ট্যাব সংরক্ষণ করে আপনার ওএস ক্লিপবোর্ডের সামগ্রীগুলি পেস্ট করবে। এটা তোলে পুরাতন সমতুল্য :set paste, i, ctrl+shift+V, esc, :set nopasteপদ্ধতি।

এমনকি আপনার আর +clipboardবা +xterm_clipboardউইম বৈশিষ্ট্যগুলি ইনস্টল করার দরকার নেই। এই বৈশিষ্ট্যটির নাম "বন্ধনীযুক্ত পেস্ট"। আরও তথ্যের জন্য /programming/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763 দেখুন

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