ওভাররাইটিং রেজিস্টার ছাড়াই কীভাবে পেস্ট করবেন


112

ডিফল্ট রেজিস্টারে নির্বাচন না করে চাক্ষুষভাবে নির্বাচিত কোনও জায়গায় পেস্ট করার কোনও উপায় কি কেউ জানেন?

আমি জানি আমি সবসময় একটি সুস্পষ্ট নিবন্ধ থেকে পেস্ট করে সমস্যার সমাধান করতে পারি। তবে ঘাড়ের মধ্যে ব্যথা হ'ল "xpন্যায়ের পরিবর্তে টাইপ করাp

উত্তর:


33

"{register}pআপনি বর্ণনা হিসাবে কাজ করবে না। এটি নিবন্ধকের সামগ্রীর সাথে নির্বাচনটি প্রতিস্থাপন করবে। পরিবর্তে আপনার মতো কিছু করতে হবে:

" I haven't found how to hide this function (yet)
function! RestoreRegister()
  let @" = s:restore_reg
  return ''
endfunction

function! s:Repl()
    let s:restore_reg = @"
    return "p@=RestoreRegister()\<cr>"
endfunction

" NB: this supports "rp that replaces the selection by the contents of @r
vnoremap <silent> <expr> p <sid>Repl()

আপনি যে কোনও প্লাগইন ব্যবহার করবেন না যতক্ষণ না পি-নন-ভিওএম্যাপ রয়েছে এবং এটি কোনও নিবন্ধকে ওভাররাইট করা প্রত্যাশা করে Which

এই কোডটি সেখানে স্ক্রিপ্ট হিসাবে উপলব্ধ । ইনগো কারকাত একই সমস্যা সমাধানের জন্য একটি প্লাগইন সংজ্ঞায়িত করেছিলেন।


প্রকৃতপক্ষে, যদিও আমি ব্যবহৃত নিবন্ধটি আনার জন্য একটি ঝরঝরে উপায় ছিল, কিন্তু কীভাবে মনে করতে পারিনি। সুতরাং ফাংশন জটিলতা।
লুক হার্মিটে

1
আমি মনে করি যে এটি ওভারকিল, regtype(লাইনওয়াইজ?) মনে রাখবেনা এবং সেই রিম্যাপিং পি pgvyযথেষ্ট?
বেনোইট

2
এটি ওভারকিল হতে পারে তবে এর কোনও পার্শ্ব প্রতিক্রিয়া নেই। একটি উপর "xp, এই ঊর্ধ্বলিপি করে @"দিয়ে বিষয়বস্তু @xঅসদৃশpgvy
লুক Hermitte

1
তাহলে কি হবে :xnoremap p pgv@=v:register.'y'<cr>?
বেনোইট

1
এটি আমার পক্ষে কাজ করে না। আমি স্ক্রিপ্টটি ডাউনলোড করার চেষ্টাও করেছি। আমি যে কমান্ডগুলি করি তার তালিকা এখানে: প্রথমে আমি v টিপব, তারপরে e শব্দের শেষে নির্বাচন করতে, তারপরে y এটি ইঙ্ক করতে। এর পরে, আমি অন্য একটি শব্দ যা আমি প্রতিস্থাপন করতে চাই। আমি এটিতে প্রতিস্থাপন করতে v, e এর পরে p টিপুন। তারপরে আমি এটি আবার করব, তবে এবার পরবর্তী শব্দটি আমি আগে প্রতিস্থাপন করা একটি দ্বারা প্রতিস্থাপিত হবে।
এডি 14

41

আমি মোছা সব লিখিত অনুলিপি ডিফল্ট তেজ আচরণ পছন্দ করেন না d, D, c, অথবা Cমধ্যে ডিফল্ট রেজিস্টার।

আমি ম্যাপিং দ্বারা এটি প্রায় অর্জিত করেছি dকরতে "_d, cকরতে "_c, ইত্যাদি।

আমার .vimrc থেকে:

"These are to cancel the default behavior of d, D, c, C
"  to put the text they delete in the default register.
"  Note that this means e.g. "ad won't copy the text into
"  register a anymore.  You have to explicitly yank it.
nnoremap d "_d
vnoremap d "_d
nnoremap D "_D
vnoremap D "_D
nnoremap c "_c
vnoremap c "_c
nnoremap C "_C
vnoremap C "_C

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

32

নিম্নলিখিত ব্যবহার:

xnoremap p pgvy

এটি ভিজ্যুয়াল মোডে আটকানো কোনও পাঠ্য পুনরায় নির্বাচন করবে এবং পুনরায় ইঙ্ক করবে।

সম্পাদনা করুন: "xpআপনার সাথে কাজ করার জন্য এটি করতে পারেন:

xnoremap p pgv"@=v:register.'y'<cr>

v:register একটি সাধারণ মোড কমান্ডে ব্যবহৃত সর্বশেষ নিবন্ধকার নামটি প্রসারিত করে।


একটিতে "xp, এই পদ্ধতির সাথে ওভাররাইট @"হয় @x
লুক হার্মিটে

3
আপনার পরামর্শটি xnoremap p pgv"@=v:register.'y'<cr>আমার পক্ষে কার্যকর হয়নি। এটি যাইহোক, এটি করে:xnoremap <expr> p 'pgv"'.v:register.'y'
মারাক

এটি আকর্ষণীয় দেখায়। আপনি কি সম্পর্কে একটি লাইন যোগ করতে পারেন g? আমি এর আগে দেখিনি।
লন্ডনরব

4
@ লন্ডনরব: gএকা কিছুই করেনা। এটি প্রসারিত, মাল্টি-কী কমান্ডগুলি সরবরাহ করে z। উদাহরণস্বরূপ, goবাফারে নবম বাইটে যায় gjএবং gkপরবর্তী এবং পূর্ববর্তী প্রদর্শিত লাইনটিতে যায় ( jkলাইনগুলি আবৃত হওয়ার সময় পৃথক হয় ), gaকার্সারের নীচে বর্ণের তথ্য প্রদর্শন করে, gJস্থান ছাড়াই লাইনগুলিতে যোগ দেয় এবং এখানে gvশেষ চাক্ষুষ নির্বাচন পুনরুদ্ধার করে। আপনি ব্যবহার করতে পারেন :help gv
বেনোইট

6
@ চিহ্ন :xnoremap <expr> p 'pgv"'.v:register.'y`>' , আমি কার্সারের অবস্থানটি পুনরুদ্ধার করতে `` `>` added যুক্ত করেছি
রক্স

19

আপনার .vimrc

xnoremap p "_dP

আমি এটি একটি অনুরূপ থ্রেডের প্রতিক্রিয়া থেকে পেয়েছি, তবে আসল উত্সটি ছিল http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text । এটি কিছু ত্রুটিগুলি উল্লেখ করেছে, তবে এটি আমার পক্ষে ঠিক কাজ করে।


2
এটি সহজ সমাধান মত মনে হচ্ছে।
rudolph9

1
আমার জন্য কাজ করেছেন। এবং এই উত্তর পরিষ্কার। .vimrc.localঠিক আছে।
বৌজিফিলং

3
আপনার নির্বাচন লাইনের শেষ পর্যন্ত প্রসারিত হলে কাজ করে না।
জন ফ্রিম্যান

6

লুক হার্মিটের দ্রবণটি কবজির মতো কাজ করে। আমি এটি প্রায় এক সপ্তাহ বা তার জন্য ব্যবহার করছিলাম। তারপরে আমি স্টিভ লশের .vimrc থেকে একটি সমাধান খুঁজে পেয়েছি যা ইয়ানক্রিং আপনার প্লাগইন / বান্ডেল লাইনআপের অংশ হলে যদি দুর্দান্তভাবে কাজ করে:

function! YRRunAfterMaps()                                                                                                      
    " From Steve Losh, Preserve the yank post selection/put.    
    vnoremap p :<c-u>YRPaste 'p', 'v'<cr>gv:YRYankRange 'v'<cr> 
endfunction  

6

এটি আপনার ~/.vimrc:

xnoremap <expr> p 'pgv"'.v:register.'y'
  • xnoremapমানে এটি কেবল Visualমোডের জন্য , Visual + Selectমোডগুলির জন্য নয় ।

  • <expr>তার মানে {rhs}এর xnoremap {lhs} {rhs}সেটিং একটি অভিব্যক্তি হিসাবে মূল্যায়ন করা হয়।

  • এই ক্ষেত্রে, আমাদের প্রকাশটি সংক্ষেপণের জন্য 'pgv"'.v:register.'y'ব্যবহার .করছে।

  • v:register ম্যাপিংয়ের পরিপূরককালে নিবন্ধকটিকে মূল্যায়ন করা হয়।

ফলাফলটি "xpমূল্যায়ন করবে pgv"xyযেখানে xরেজিস্টার।

আমি এই Stackoverflow প্রশ্নের উত্তর সহযোগিতা করা হয়েছিল: তেজ - একটি ঐচ্ছিক রেজিস্টার উপসর্গ এর সাথে ম্যাপিং সাথে বেনইট এর উত্তর এই পৃষ্ঠাতে


4

আমার কাছে ক্লিপবোর্ড = নামবিহীন সেট রয়েছে তা সমর্থন করার জন্য একটি পরিবর্তন করার পরে লুসের ফাংশনটি আমার পক্ষে ভালভাবে কাজ করেছে:

function! RestoreRegister()
    let @" = s:restore_reg
    if &clipboard == "unnamed"
        let @* = s:restore_reg
    endif
    return ''
endfunction

1
রেফারেন্সের জন্য: এটি ব্যবহারের পরিবর্তে clipboard=unnamedplusথাকতে @+হবে @*
সেবাস্তিয়ান ব্লাস্ক

2

লুক হার্মিটের কৌতুকটা কি! আসলেই ভাল. এখানে তার সমাধানটি একটি টগল ফাংশনে রাখা হয়েছে, যাতে আপনি স্বাভাবিক আচরণ এবং কোনও-প্রতিস্থাপন-নিবন্ধক পুটের মধ্যে স্যুইচ করতে পারেন।

কমান্ড, আপনি আচরণ toggles

let s:putSwap = 1 
function TogglePutSwap()
    if s:putSwap
        vnoremap <silent> <expr> p <sid>Repl()
        let s:putSwap = 0 
        echo 'noreplace put'
    else
        vnoremap <silent> <expr> p p 
        let s:putSwap = 1 
        echo 'replace put'
    endif
    return
endfunction
noremap ,p :call TogglePutSwap()<cr>

আপনি এস পরিবর্তন করতে পারেন: এস এর উপর নির্ভর করে "পি @ = রিস্টোররেজিস্টার () c <সিআর>" পরিবর্তে "পি" ফেরত জবাব দিন put
লুক হার্মিট 10

1
এর silent! vunmapপরিবর্তে পছন্দ করুনvnoremap <silent> <expr> p p
লুক হার্মিটে

0

নালী-টেপ প্রোগ্রামিং, তবে আমার জন্য কাজ করে:

nmap viwp viwpyiw
nmap vi'p vi'pyi'
nmap vi"p vi"pyi"
nmap vi(p vi(pyi(
nmap vi[p vi[pyi[
nmap vi<p vi<pyi<

-4

চেষ্টা -

:set guioptions-=a
:set guioptions-=A

3
নির্বাচিত পাঠ্যটি উইন্ডোটিং সিস্টেমের ক্লিপবোর্ডে যুক্ত করা হয়েছে কিনা তা নিয়ন্ত্রণ করে (যেমন, এক্স 11 বা উইন 32), ভিমের অভ্যন্তরীণ অনুলিপি নিবন্ধগুলিতে নয়।
রব কেনেডি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.