ভিম মধ্যে একটি কমান্ড Aliasing


151

Vim আমি যখন প্রোগ্রাম করি তখন আমার পছন্দের পাঠ্য সম্পাদক এবং আমি সর্বদা একটি বিরক্তিকর ইস্যুতে চলে যাই।

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

:w

যাইহোক, আমি - যা সময়ের প্রায় 50% এর চেয়ে বেশি মনে হয় - সর্বদা এটির মূলধন পরিচালনা করি :w। স্বাভাবিকভাবেই, ভিম আমার দিকে চিত্কার করে কারণ Wএটি একটি অবৈধ আদেশ

E492: Not an editor command: W

আমার প্রশ্নটি হল যে কোনও একটি উপনামটি ভিএম-তে কীভাবে কর্নেল-আদেশ করতে পারে । বিশেষত, আপনি কীভাবে ওরফে নামকরণ করবেন তা উদাহরণ দিয়ে দিতে Wপারেন w

নির্দিষ্ট কমান্ডের কীগুলি ম্যাপ করার প্রক্রিয়াটি সম্পর্কে আমি সচেতন । দুর্ভাগ্যক্রমে, আমি এটিই খুঁজছি না।



1
এড়াতে :Wআপনি কোনও মানচিত্র সাশ্রয়টি সম্পাদন করতে পারেন। আপনি যদি সিটিআরএল-এর সাহায্যে সংরক্ষণ করে এমন কোনও প্রোগ্রামে ব্যবহার করেন তবে there ভিআইএম / এমসউইন.ভিম থেকে এই ম্যাপিংগুলি রয়েছে:" Use CTRL-S for saving, also in Insert mode noremap <C-S> :update<CR> vnoremap <C-S> <C-C>:update<CR> inoremap <C-S> <C-O>:update<CR>
এম মন্টু

Vi স্ট্যাক এক্সচেঞ্জে একই প্রশ্ন: vi.stackexchange.com/q/2665/7244
Flimm

উত্তর:


127

সম্পূর্ণরূপে ছোঁয়া ছাড়ার জন্য, ব্যবহার করার চেষ্টা করুন

cnoreabbrev W w

, এটি Wকমান্ড লাইনের সাথে প্রতিস্থাপন করবে w, তবে কেবলমাত্র এটি অক্ষর অক্ষর অনুসারে অনুসরণ বা পূর্ববর্তী না হলে তাই :W<CR>প্রতিস্থাপন করা হবে :w<CR>, কিন্তু :Writeহবে না। (দ্রষ্টব্য যে এটি এমন কোনও কমান্ডকে প্রভাবিত করে যা আপনার প্রত্যাশিত নয় এমনগুলি সহ মিলিত হয়, উদাহরণস্বরূপ কমান্ডটি :saveas W Zপ্রতিস্থাপন করা হবে :saveas w Z, সুতরাং এটির সাথে সাবধানতা অবলম্বন করুন))

হালনাগাদ

আমি এখন এটি লিখতে হবে কিভাবে এখানে :

cnoreabbrev <expr> W ((getcmdtype() is# ':' && getcmdline() is# 'W')?('w'):('W'))

একটি ফাংশন হিসাবে:

fun! SetupCommandAlias(from, to)
  exec 'cnoreabbrev <expr> '.a:from
        \ .' ((getcmdtype() is# ":" && getcmdline() is# "'.a:from.'")'
        \ .'? ("'.a:to.'") : ("'.a:from.'"))'
endfun
call SetupCommandAlias("W","w")

এটি পরীক্ষা করে যে কমান্ডের ধরনটি রয়েছে :এবং কমান্ডটিও Wতাই এটি কেবলমাত্র চেয়ে নিরাপদ cnoreabbrev W w


2
এই উত্তরটি আমার পক্ষে সবচেয়ে নিরাপদ এবং সবচেয়ে নির্ভরযোগ্য।
শান

2
আপনি যদি প্রস্তাবিত সমাধানটি ব্যবহার করেন তবে দয়া করে সচেতন হন নীচের দুটি :%s/W/foo/g<CR> :%s/w/foo/g<CR>
আদেশই

2
প্রকৃতপক্ষে, এর অর্থ হ'ল ডাব্লু কমান্ড বারের যে কোনও জায়গায় প্রতিস্থাপন করা হবে , উদাহরণস্বরূপ, অনুসন্ধানগুলিতে, সুতরাং এস / ডাব্লু foo / বার / জি s / w foo / bar / g তে রূপান্তরিত হবে। এটি সত্যিই বিরক্তিকর হতে পারে। একটি ব্যাপক সমাধানের জন্য আমার উত্তর দেখুন।
হামলা

4
একেবারে; এটি একটি ভয়াবহ ধারণা। আপনি উচিত না , কি কখনো , কখনো এই কাজ।
ক্রিস মরগান

4
:cnoreabbrev <expr> W getcmdtype()==':'&&getcmdline()=~#'^W'?'w':'W'
কেভ

97

পরিপূরক অনুসন্ধানের সাথে আমি খুঁজে পেয়েছি যে কেউ আমার মতো প্রায় একই প্রশ্ন জিজ্ঞাসা করেছে ।

:command <AliasName> <string of command to be aliased>

কৌতুক করবে

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


5
ব্যবহার: কমান্ড ভাল সমাধান। : cnoreabbrev বুঝতে পারছেন না cmd1 | cmd2,: কমান্ডটি করে।
পাভেল স্ট্র্যাভভ

1
এটি লেখার একটি কম বিভ্রান্তিকর উপায় হ'ল:command AliasName string of command to be aliased
অ্যালেক জ্যাকবসন

8
এটি কোনও commandআর্গুমেন্ট -nargs, -completeইত্যাদি হ্যান্ডেল / ফরোয়ার্ড করবে না
ব্লুচেড

কি :Q!বা :W!?
জ্যাক

5
করা: শুধু খুব আক্ষরিক হতে :command W wমধ্যে .vimrcফাইল।
isomorphismes

20

আমি দেখতে পেয়েছি যে ;কীটির ম্যাপিং :করা আরও ভাল সমাধান হবে এবং আপনাকে অন্যান্য আদেশগুলি টাইপ করার জন্য আরও উত্পাদনশীল করে তুলবে।

nnoremap ; :
vnoremap ; :

এটি ভিমের একক সেরা টিপ। আমি এখন এতটা অভ্যস্ত যে প্রতিবার যখন আমি স্বাভাবিক আচরণের মুখোমুখি হই তখন আমার মনকে পুনরায় প্রশিক্ষণ দেওয়ার জন্য কয়েকজন চেষ্টা করে আমার লাগে।
এয়ারট্রাইক

এটি প্রশ্নের উত্তর নয়।
ফ্লিম 11

5
@ ফ্লিম না, তবে এটি ওপির সমস্যাটিকে দূরে সরিয়ে দেয়।
ডানকান এক্স সিম্পসন

1
ব্যবহার করার সময় tবা fব্যবহার ;করার সময় , কেউ সাধারণত পরবর্তী ইভেন্টে যেতে ব্যবহার করতে পারেন। আপনি সেমিকোলনটি কোলনে ম্যাপ করলেও, অন্য কেউ নিরাপদে ম্যাপ করতে পারে। কোনও উপনাম লুপ থাকবে না। nnoremap : ;
লুক

9

সর্বোত্তম সমাধানটিতে সংক্ষিপ্তসারগুলি পরিচালনা করার জন্য একটি কাস্টম ফাংশন লেখা রয়েছে যা কেবলমাত্র কমান্ড বারের শুরুতে ঘটে।

এর জন্য, নিম্নলিখিত আপনার ভিএমআরসি ফাইল বা অন্য কোথাও যুক্ত করুন।

" cabs - less stupidity                                                      {{{
fu! Single_quote(str)
  return "'" . substitute(copy(a:str), "'", "''", 'g') . "'"
endfu
fu! Cabbrev(key, value)
  exe printf('cabbrev <expr> %s (getcmdtype() == ":" && getcmdpos() <= %d) ? %s : %s',
    \ a:key, 1+len(a:key), Single_quote(a:value), Single_quote(a:key))
endfu
"}}}

 

" use this custom function for cabbrevations. This makes sure that they only
" apply in the beginning of a command. Else we might end up with stuff like
"   :%s/\vfoo/\v/\vbar/
" if we happen to move backwards in the pattern.

" For example:
call Cabbrev('W', 'w')

উত্স উপাদান থেকে কয়েকটি দরকারী সংক্ষেপণ যেখানে আমি এই জিনিসটি পেয়েছি:

call Cabbrev('/',   '/\v')
call Cabbrev('?',   '?\v')

call Cabbrev('s/',  's/\v')
call Cabbrev('%s/', '%s/\v')

call Cabbrev('s#',  's#\v')
call Cabbrev('%s#', '%s#\v')

call Cabbrev('s@',  's@\v')
call Cabbrev('%s@', '%s@\v')

call Cabbrev('s!',  's!\v')
call Cabbrev('%s!', '%s!\v')

call Cabbrev('s%',  's%\v')
call Cabbrev('%s%', '%s%\v')

call Cabbrev("'<,'>s/", "'<,'>s/\v")
call Cabbrev("'<,'>s#", "'<,'>s#\v")
call Cabbrev("'<,'>s@", "'<,'>s@\v")
call Cabbrev("'<,'>s!", "'<,'>s!\v")

1
একটি অন্তর্নির্মিত ফাংশন রয়েছে string()যা আপনার মতো একই কাজ করে Single_quote()
জাইএক্স

6

হতে পারে আপনি নিজের ফাংশন কী (F1..F12) এর একটিতে মানচিত্র করতে চান: w? তারপরে এটি আপনার .vimrc এ রাখুন:

noremap  <f1> :w<return>
inoremap <f1> <c-o>:w<return>

(সন্নিবেশ মোডে সিআরটিএল-ও অস্থায়ীভাবে সাধারণ মোডে স্যুইচ করে)।


6

ধরুন আপনি gvim এ ট্যাবনেউ কমান্ডের জন্য উপনাম যুক্ত করতে চান। আপনি নিজের .vimrc ফাইলটিতে কেবল নিম্নলিখিত কমান্ডটি টাইপ করতে পারেন (এটি তৈরির চেয়ে হোম ফোল্ডারে না থাকলে)

cabbrev t tabnew

1
এই মত একটি কমান্ড কারণ হবে :saveas t exampleদিয়ে প্রতিস্থাপিত করা:saveas tabnew example
Flimm

5

নিরাপদ এবং সহজতম একটি প্লাগইন যেমন সেমিডালিয়াস.ভিআইএম বা আমার সাম্প্রতিক আপডেটের এটির ভিএম -উপন্যাস যা অ্যাকাউন্টে নেয়

  • ঐ খালি বা যেমন সংশোধনকারীদের পূর্ববর্তী :sil(ent)(!)বা :redi(r),
  • পরিসীমা সংশোধক যেমন '<,'>বর্তমান ভিজ্যুয়াল নির্বাচনের জন্য,
  • বিশেষ অক্ষর যেমন উদ্ধৃতি, এবং এড়িয়ে চলুন
  • নির্বাচিত উপনামটি বৈধ কমান্ড লাইন সংক্ষেপণ কিনা তা পরীক্ষা করে দেখুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.