ধরা যাক আমাদের একটি পাঠ্য রয়েছে এবং আমি ভিজ্যুয়াল মোডে প্রবেশ করি এবং কিছু পাঠ্য নির্বাচন করি। আমি কীভাবে দ্রুত হাইলাইট করা পাঠ্যের জন্য অনুসন্ধান করব এবং এটিকে অন্য কিছু দিয়ে প্রতিস্থাপন করব?
ধরা যাক আমাদের একটি পাঠ্য রয়েছে এবং আমি ভিজ্যুয়াল মোডে প্রবেশ করি এবং কিছু পাঠ্য নির্বাচন করি। আমি কীভাবে দ্রুত হাইলাইট করা পাঠ্যের জন্য অনুসন্ধান করব এবং এটিকে অন্য কিছু দিয়ে প্রতিস্থাপন করব?
উত্তর:
নিম্নলিখিতগুলি সম্পাদন করার চেষ্টা করুন বা আপনার মধ্যে প্রবেশ করান .vimrc
vnoremap <C-r> "hy:%s/<C-r>h//gc<left><left><left>
ভিজ্যুয়াল মোডে ctrl+ টিপে rআপনি প্রতিস্থাপন করতে পাঠ্য প্রবেশের অনুরোধ জানানো হবে। enterআপনি যে প্রতিটি পরিবর্তনের সাথে সম্মত হন yবা স্বীকার করেন তার প্রতিটি টিপুন এবং তারপরে নিশ্চিত করুনn ।
এই কমান্ডটি আপনার নিবন্ধকে ওভাররাইড করবে h
যাতে আপনি অন্যটি বেছে নিতে পারেন ( h
উপরের কমান্ডটি অন্য ছোট কেস লেটারে পরিবর্তন করে) যা আপনি ব্যবহার করেন না।
vmap * y:let @/ = @"<CR>
নির্বাচিত হাইলাইট করা হয়।
<left><left><left>
?
c
থেকে অপসারণ সম্পর্কে পরামর্শ গ্রহণ করেন তবে আপনাকে লাইনের শেষ থেকে ' গুলি'র একটি সরিয়ে gc
ফেলতে হবে <left>
।
চাক্ষুষরূপে হাইলাইট করা পাঠ্যের জন্য এইচ এবং সহজ ম্যাপিং অনুসন্ধান (এইচ রেজিস্টার অতিরিক্ত লিখিত না করে) এবং টার্মিনাল নির্ভর + নিবন্ধ ব্যবহার না করে:
" search for visually hightlighted text
vnoremap <c-f> y<ESC>/<c-r>"<CR>
আপনি যদি সিটিআরএল-এ পছন্দ করেন না তবে এটি আপনার পছন্দকে পরিবর্তন করুন
একবার পাঠ্যটি হাইলাইট হয়ে গেলে আপনি সর্বদা s
সহজ টাইপ করে একটি প্রতিস্থাপন করতে পারেন :
%s//<your-replacement-string>
... কারণ s
কমান্ডের একটি ফাঁকা অনুসন্ধান স্ট্রিংয়ের জন্য সর্বশেষ অনুসন্ধান করা স্ট্রিং ব্যবহার করে।
control+f
সর্বদা পরবর্তী অক্ষরটি পাশাপাশি যা আমি দৃষ্টিভঙ্গি দ্বারা নির্বাচন করি তা নির্বাচন করে। কোন ধারনা?
%s//<your-replacement-string>
এর মতো কিছু হাইলাইট করার জন্য কাজ করছে বলে মনে হয় না /tmp/file
। এটি কেবল হয়ে যায়<your-replacement-string>/tmp/file
এটি একটিতেও কাজ করে (কমপক্ষে একটি একক লাইন / নির্বাচনের জন্য যা কোনও বিশেষ অক্ষর ধারণ করে না)
y
:s/<C-r>0/
0
ইয়াঙ্ক রেজিস্টার।
অন্যান্য লোকেরা যেমন উল্লেখ করেছে, এর জন্য আরও দ্রুততর উপায় রয়েছে তবে আপনি যদি সবেমাত্র আমার (আমার মতো) ভিম শিখতে শুরু করেন তবে এটি 'জেনেরিক' উপায়গুলির মধ্যে একটি।
// সম্পাদনা: আমি ঠিক বুঝতে পেরেছি যে /
নির্বাচনের ট্যাব বা নিউলাইন বা অক্ষরগুলির মতো অক্ষর থাকলে ( :s
কমান্ডটি কাজ করার জন্য আমাকে এই অক্ষরগুলিকে ম্যানুয়ালি প্রসেস করতে হবে): 'রেজিস্টার' পদ্ধতিটি ব্যর্থ হবে :
গ্রহণযোগ্য উত্তরটি দুর্দান্ত কাজ করে যদি না আপনার ভিজ্যুয়াল নির্বাচনের বিশেষ অক্ষর থাকে। আমি দুটি স্ক্রিপ্ট ( জেরেমি ক্যান্ট্রেল এখানে পোস্ট করা এবং পিটার অডিংয়ের ) একসাথে হ্যাক করেছি যাতে একটি কমান্ড তৈরি করা যায় যা আপনাকে দৃষ্টিগোচর করে এমন একটি স্ট্রিং নির্বাচন করতে দেয় যা এটিতে বিশেষ রেজেক্স অক্ষর থাকলেও আপনি এটি পেতে চান।
" Escape special characters in a string for exact matching.
" This is useful to copying strings from the file to the search tool
" Based on this - http://peterodding.com/code/vim/profile/autoload/xolox/escape.vim
function! EscapeString (string)
let string=a:string
" Escape regex characters
let string = escape(string, '^$.*\/~[]')
" Escape the line endings
let string = substitute(string, '\n', '\\n', 'g')
return string
endfunction
" Get the current visual block for search and replaces
" This function passed the visual block through a string escape function
" Based on this - /programming/676600/vim-replace-selected-text/677918#677918
function! GetVisual() range
" Save the current register and clipboard
let reg_save = getreg('"')
let regtype_save = getregtype('"')
let cb_save = &clipboard
set clipboard&
" Put the current visual selection in the " register
normal! ""gvy
let selection = getreg('"')
" Put the saved registers and clipboards back
call setreg('"', reg_save, regtype_save)
let &clipboard = cb_save
"Escape any special characters in the selection
let escaped_selection = EscapeString(selection)
return escaped_selection
endfunction
" Start the find and replace command across the entire file
vmap <leader>z <Esc>:%s/<c-r>=GetVisual()<cr>/
এটি কারও বেশি উপকারী হলে আমি এটি আমার ভিআরসিআর- এ অন্তর্ভুক্ত করেছি ।
vmap <C-r> <Esc>:%s/<c-r>=GetVisual()<cr>//g<left><left>
(যা কেবলমাত্র ফাইলের মধ্যে সবগুলি প্রতিস্থাপন করে)
ভিম .4.৪ থেকে আপনি gn
মোশনটি ব্যবহার করতে পারেন যা বর্তমান অনুসন্ধানের ধরণের সাথে মেলে এমন পাঠ্য অঞ্চল নির্বাচন করে।
সাধারণ মোডে cgn
বর্তমানে নির্বাচিত ম্যাচে (বা dgn
মুছতে) পাঠ্য পরিবর্তন করার পরে , আপনি ব্যবহার করতে পারেন.
আদেশটি পুনরাবৃত্তি করতে এবং পরবর্তী ম্যাচে পরিচালনা ।
আছে Vimcast একটি পর্বে এই বৈশিষ্ট্য দেখাচ্ছে।
মাইকোলা গোলুয়েভ, টিপটির জন্য ধন্যবাদ! নীচে "+" নিবন্ধ ব্যবহার করে যা (আপনার টার্মিনালের উপর নির্ভর করে) "হ" রেজিস্টার ব্যবহার করে সংরক্ষণ করে ইতিমধ্যে হাইলাইট করা পাঠ্য রয়েছে।
vnoremap <C-r> <Esc>:%s/<C-r>+//gc<left><left><left>
Http://vim.wikia.com/wiki/Search_and_replace_in_a_visual_selection থেকে :
পাঠ্যটি চাক্ষুষভাবে নির্বাচন করা হলে, একটি কমান্ড প্রবেশ করতে টিপুন: কমান্ড লাইনটি স্বয়ংক্রিয়ভাবে সীমাতে প্রবেশ করবে:
:'<,'>
শেষ ভিজ্যুয়াল নির্বাচনের সমস্ত লাইনে প্রতিটি লালকে সবুজ রঙের সাথে প্রতিস্থাপন করতে আপনি s / red / সবুজ / g এর মতো একটি কমান্ড লিখতে পারেন। কমান্ডটি প্রদর্শিত হবে:
:'<,'>s/red/green/g
পূর্ববর্তী নির্বাচিত ব্লকের উপর একটি প্রাক্তন কমান্ড পুনরাবৃত্তি করতে: ইতিহাসটি ব্যবহার করুন। এটি, টিপুন: তারপরে একটি পূর্ববর্তী কমান্ড সম্পাদনা করুন edit
এটি আমার ভিএমআরসি-তে রয়েছে:
function! GetVisual() range
let reg_save = getreg('"')
let regtype_save = getregtype('"')
let cb_save = &clipboard
set clipboard&
normal! ""gvy
let selection = getreg('"')
call setreg('"', reg_save, regtype_save)
let &clipboard = cb_save
return selection
endfunction
vmap <leader>z :%s/<c-r>=GetVisual()<cr>/
এটি ভিজ্যুয়াল নির্বাচন দখল করবে এবং এটির সাথে একটি বিকল্প কমান্ড শুরু করবে।
সম্পাদনা: আমার উল্লেখ করা উচিত যে এটি মাল্টলাইন ভিজ্যুয়াল নির্বাচনের সাথে কাজ করে না। গেটভিজুয়াল () এর এটি ফিরে আসার ক্ষেত্রে সমস্যা না থাকলেও কীভাবে এটি কমান্ড লাইনে সঠিকভাবে স্থাপন করবেন তা আমি নিশ্চিত নই। আমি কীভাবে এটি করতে পারি তার যদি কারও কাছে কোনও টিপস থাকে তবে মন্তব্য করুন।
অন্যান্য উত্তরগুলি ভাল তবে তারা বিশেষ অক্ষরগুলি থেকে রেহাই পায় না। @ ব্রায়ান কেনেডি এর উত্তর পালাতে একটি পদ্ধতি দেখায় তবে এর জন্য অনেক কোড দরকার much উদাহরণস্বরূপ কোনও ইউআরএল'র ক্ষেত্রে, পালানো বাধ্যতামূলক বা অনুসন্ধানটি ":" এ থামবে।
Vim.fandom.com/wiki/Search_for_visually_selected_text এ যেমন লেখা আছে , আপনি কিছু অক্ষর অনুসন্ধান করতে এবং এড়াতে অনলাইনার করতে পারেন। আপনি যে চরিত্রগুলি চান তা থেকে বাঁচতে পারবেন, আমি পালাতে বেছে নিয়েছি /\:
:
vnoremap // y/\V<C-R>=escape(@",'/\:')<CR><CR>
এই মানচিত্রটি দিয়ে, আমাকে অবশ্যই টিপতে হবে //
সাহায্যে পুরো বাফারে বর্তমানে নির্বাচিত পাঠ্যটি অনুসন্ধান করতে ভিজ্যুয়াল মোডে ।
আমার কাছে মন্তব্য করার জবাব নেই, তাই আমি আরও একটি উত্তর যুক্ত করছি ...
vnoremap <C-r> "0y<Esc>:%s/<C-r>0//g<left><left>
@ ডিএমডি এবং @ ডোটানকোহেন: এটি ব্যবহার না করেই আমার পক্ষে কাজ করেছে "h
(স্পষ্টভাবে 0 ব্যবহার করে, যা যাইহোক শেষ ইয়াঙ্ক অবস্থান) এবং পুটি এসএস -> পুদিনা (এলএমডি) নিয়ে কাজ করে; শতক সম্পর্কে জানেন না। নিশ্চিতকরণ অপসারণ করতে @ নীলোকট এবং @ নাথান ফ্রেন্ডের মন্তব্যগুলিও ব্যবহার করে।
উদাহরণ 1. তারার সাথে উদ্ধৃতি নির্বাচন, নির্বাচনের শুরুতে কার্সার রাখুন।
:%s,\%#\%V\_.*\%V/,**&**,c
উদাহরণ 2. বেস 64 সহ পাইপ নির্বাচিত পাঠ্য:
:%s!\%#\%V\_.*\%V!\=system("base64 -w 0",@")!c
ব্যাখ্যা এলএইচএস:
\%# matches cursor
\%V matches inside the selection only
\_. matches any character.
\_.* matches beginning to end of selection.
ব্যাখ্যা আরএইচএস:
\=expr() Replace match with result of expr() for each substitution.
আমি আশা করছিলাম যে কোনও শব্দটির প্রতিস্থাপন করার জন্য ভিমের মধ্যে আগে থেকেই শব্দটি পুনরায় টাইপ না করে একটি বিল্ট তৈরি হয়েছিল। রয়েছে, যদিও এটি কেবল একটি শব্দ সীমা চরিত্র পর্যন্ত পাঠ্যের জন্য কাজ করবে।
একবার আপনি শব্দটি ছাপিয়ে গেলে, টিপুন *
বা #
শব্দটি হাইলাইট করতে এবং এর পরবর্তী / পূর্ববর্তী অবস্থানটিতে ঝাঁপিয়ে পড়ুন (আপনি যদি ফাইলটিতে অবস্থান পরিবর্তন করতে চান না, তবে অবস্থানটিতে ফিরে যাওয়ার জন্য বিপরীত কীটি টিপুন আপনি ঠিক ছিল)
তারপরে কেবল টাইপ করুন:
%s//<your-replacement-string>
অন্য ব্যক্তির উত্তরে উল্লিখিত হিসাবে, যদি %s
স্ল্যাশগুলির মধ্যে একটি ফাঁকা এন্ট্রি পাওয়া যায়, তবে এটি পূর্বে অনুসন্ধান করা শব্দটি ব্যবহার করে। টিপে *
বা#
, আপনি কার্সারের নীচে শব্দটি সন্ধান করছেন যা এটি সর্বাধিক সন্ধান করা শব্দ।
শেষ পর্যন্ত এটি সম্পাদন করতে কেবল ছয় বা সাতটি কীস্ট্রোক + প্রতিস্থাপন শব্দের দৈর্ঘ্য এবং এটিতে আপনার কোনও ম্যাক্রো বা সম্পাদনা প্রয়োজন .vimrc
।
c
মধ্যেgc
, রিপ্লেস পুরো বাফারে একযোগে সম্পন্ন করা হয়। আপনি যদি ভুল করে থাকেন এবং এটিকে ফিরিয়ে দিতে চান তবেu
কমান্ড মোডে টাইপ করুন। প্রতিস্থাপনের প্রতিটি নিশ্চিত করার চেয়ে আমি এই পদ্ধতির পছন্দ করি (এটি সংশোধকটির সাথে ঘটেc
)।