Vim හි ඇති remap, noremap, nnoremap සහ vnoremap සිතියම්කරණ විධානයන් අතර වෙනස කුමක්ද?


1135

අතර ඇති වෙනස කුමක්ද remap, noremap, nnoremapහා vnoremapවිම් දී සිතියම් විධාන?


2
අවවාදය, vnoremapසහ vmapදෘශ්ය හා තේරීම් ආකාරයෙන් වැඩ කටයුතු. සිතියම් ගත කිරීම දෘශ්‍ය ප්‍රකාරයේදී පමණක් භාවිතා කිරීමට xmapසහ භාවිතා කරන්න xnoremap.
බෙනොයිට්

Answers:


1652

remapසිතියම් පුනරාවර්තව ක්‍රියා කරන විකල්පයකි . පෙරනිමියෙන් එය ක්‍රියාත්මක වන අතර එය එලෙසම තබන ලෙස මම නිර්දේශ කරමි. ඉතිරිය පහත විස්තර කර ඇති සිතියම්කරණ විධානයන් ය :

:mapහා :noremapආවර්තනික හා නොවන ආවර්තනික විවිධ සිතියම් විධාන සංස්කරණ. එයින් අදහස් කරන්නේ ඔබ එසේ කරන්නේ නම්:

:map j gg
:map Q j
:noremap W j

jවෙත සිතියම් ගත කෙරේ gg. Qඇත චේට කළ ggනිසා, jආවර්තනික සිතියම්ගත කිරීම සඳහා පුළුල් කරනු ලබනවා. Wචේට ඇත j(සහ නොව ggනිසා) jකැමැත්ත-ආවර්තනික නොවන සිතියම්ගත කිරීම සඳහා පුළුල් කරනු නැත.

දැන් මතක තබා ගන්න Vim යනු මොඩල් සංස්කාරකයෙකි . එය සාමාන්‍ය මාදිලියක්, දෘශ්‍ය මාදිලියක් සහ වෙනත් මාතයන් ඇත.

මෙම සෑම සිතියම් කට්ටලයක් සඳහාම, සාමාන්‍ය, දෘශ්‍ය, තෝරාගත් සහ ක්‍රියාකරු මාතයන් ( සහ ), සාමාන්‍ය ප්‍රකාරයේදී ( සහ ) ක්‍රියා කරන, දෘශ්‍ය ප්‍රකාරයේ ( සහ ) යනාදී වශයෙන් ක්‍රියා කරන සිතියම්කරණයක් ඇත.:map:noremap:nmap:nnoremap:vmap:vnoremap

මේ පිළිබඳ වැඩි මග පෙන්වීමක් සඳහා, බලන්න:

:help :map
:help :noremap
:help recursive_mapping
:help :map-modes

8
ඔබේ පිළිතුරට ස්තූතියි! එසේම, පුනරාවර්තන භාවිතා කරන්නේ කවදාද, සහ පුනරාවර්තන නොවන විට භාවිතා කරන්නේ කවදාද?
චෙතන්

14
He චෙතන්: එය ඔබට ළඟා කර ගැනීමට අවශ්‍ය දේ මත රඳා පවතී. මම පුනරාවර්තන නොවන බොහෝ විට භාවිතා කිරීමට නැඹුරු වෙමි, නමුත් ඔබ පුනරාවර්තන නොවන භාවිතා කරමින් සාපේක්ෂව සංකීර්ණ සිතියම්කරණයක් නිර්වචනය කර ඇත්නම් සහ පළමු සිතියම්ගත කිරීම සහ තවත් බොහෝ දේ කරන තවත් සිතියම් ගත කිරීමක් කරන්නේ නම්, ඇතුළත් වන පුනරාවර්තන සිතියම් භාවිතා කිරීම පහසු වනු ඇත. පුනරාවර්තන නොවන සියල්ලම නැවත ටයිප් කරනවාට වඩා මුල් එකක් (විශේෂයෙන් ඔබට මුල් එක වෙනස් කිරීමට අවශ්‍ය නම්).
DrAl

10
මම උපකල්පනය noremapකළේ ඊට හාත්පසින්ම වෙනස් දෙයක් ලෙසයි map. මම අදහස් කළේ සිතියමක් ඉවත් කරන දෙයක්. පිළිතුරට ස්තූතියි. එය මට පැහැදිලි කළා
පවන් මංජුනාත්

4
බහුතරයක් භාවිතා කිරීමේ අවස්ථාවන් සඳහා එය එතරම් වැදගත් නොවේ, නමුත් :mapආදිය සෑම ආකාරයකින්ම ක්‍රියා නොකරන බව සැලකිල්ලට ගත යුතුය . හරියටම සියලුම පොදු ඒවා (විශේෂයෙන්, සාමාන්‍ය මාදිලිය, දෘශ්‍ය ප්‍රකාරය, තෝරාගත් මාදිලිය සහ ක්‍රියාකරු-අපේක්ෂිත ප්‍රකාරය). ඇතුළත් කිරීමක්, විධාන රේඛාවක් හෝ ලැන්ග්-ආර්ග් මාදිලියක වැඩ කිරීමට ඔබට සිතියමක් අවශ්‍ය නම්, ඔබ භාවිතා කළ යුතුය :map!. (මුලාශ්‍රය: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
කෙන් බෙලෝස්

3
@whytheq noremap = පුනරාවර්තන නොවන සිතියම්කරණය
ඩෑන් බෙචාර්ඩ්

289

මෙම විධානයන් නම් කිරීම පිටුපස ඇති අර්ථය Vim ප්‍රලේඛනය මගින් පැහැදිලි කළ යුතු යැයි මම සිතමි. ඔවුන් කරන දේ ඔබට පැවසීමෙන් ඔබට නම් මතක තබා ගැනීමට උපකාරී නොවේ.

mapසියලු පුනරාවර්තන සිතියම්කරණ විධානයන්හි “root” වේ. මූල පෝරමය "සාමාන්‍ය", "දෘශ්‍ය + තේරීම" සහ "ක්‍රියාකරු-අපේක්ෂිත" මාතයන් සඳහා අදාළ වේ. ( වාග් විද්‍යාවේදී මෙන් මම "මූල" යන යෙදුම භාවිතා කරමි .)

noremapසියලු පුනරාවර්තන නොවන සිතියම්කරණ විධානයන්හි “root” වේ. මූල ස්වරූපය එකම ආකාරයන්ට අදාළ වේ map. ( nore"පුනරාවර්තන නොවන" යන්නෙහි අර්ථය සඳහා උපසර්ගය ගැන සිතන්න .)

( ඇතුළු කිරීමට සහ විධාන රේඛාවට අදාළ වන !මාතයන් ද ඇති බව සලකන්න map!.)

මෙම සන්දර්භය තුළ "පුනරාවර්තන" යන්නෙන් අදහස් කරන්නේ කුමක්ද යන්න පහත බලන්න.

nසිතියම්ගත කිරීම ක්‍රියාත්මක වන මාතයන් වෙනස් කිරීම වැනි මාදිලි ලිපියක් සැකසීම. එයට අදාළ වන මාතයන් ලැයිස්තුවේ උප කුලකයක් තෝරා ගත හැකිය (උදා: “දෘශ්‍ය” පමණි), නැතහොත් mapඅදාළ නොවන වෙනත් මාතයන් තෝරා ගන්න (උදා: “ඇතුළු කරන්න”).

help map-modesසිතියම්ගත කිරීම අදාළ වන කුමන ආකාරයන් පාලනය කරන්නේ කෙසේද යන්න පැහැදිලි කරන වගු කිහිපයක් භාවිතය මඟින් පෙන්වනු ඇත.

මාදිලි අකුරු:

  • n: සාමාන්‍ය පමණි
  • v: දෘශ්‍ය හා තෝරන්න
  • o: ක්‍රියාකරු-අපේක්ෂාවෙන් සිටී
  • x: දෘශ්‍ය පමණි
  • s: පමණක් තෝරන්න
  • i: ඇතුළු කරන්න
  • c: විධාන රේඛාව
  • l: ඇතුළු කරන්න, විධාන රේඛාව, රීජෙක්ස්-සෙවීම (සහ වෙනත්. සාමූහිකව "ලැන්ග්-ආර්ග්" ව්‍යාජ මාදිලිය ලෙස හැඳින්වේ)

පුනරාවර්තන ” යන්නෙන් අදහස් කරන්නේ සිතියම්කරණය ප්‍රති result ලයක් දක්වා පුළුල් වන අතර පසුව ප්‍රති result ලය වෙනත් ප්‍රති result ලයකට පුළුල් වන අතර යනාදියයි.

මේවායින් එකක් සත්‍ය වූ විට ප්‍රසාරණය නතර වේ:

  1. ප්‍රති result ලය තවදුරටත් වෙනත් දෙයකට සිතියම් ගත නොකෙරේ.
  2. පුනරාවර්තන නොවන සිතියම්ගත කිරීමක් යෙදී ඇත (එනම් “නොර්මැප්” [හෝ එහි එක් ඉල්ක්] අවසාන ප්‍රසාරණය වේ).

එම අවස්ථාවෙහිදී, අවසාන ප්‍රති result ලයේ Vim හි පෙරනිමි "අර්ථය" යෙදේ / ක්‍රියාත්මක වේ.

පුනරාවර්තන නොවන ” යන්නෙන් අදහස් වන්නේ සිතියම්ගත කිරීම එක් වරක් පමණක් පුළුල් වන අතර එම ප්‍රති result ලය ක්‍රියාත්මක / ක්‍රියාත්මක වේ.

උදාහරණයක්:

 nmap K H
 nnoremap H G
 nnoremap G gg

ඉහත හේතු Kදක්වා පුළුල් වීමටත් H, පසුව Hපුළුල් Gවීමටත් නැවැත්වීමටත් හේතු වේ. එය නතර වන්නේ nnoremap, එය පුළුල් වන අතර වහාම නතර වේ. අර්ථය ක්‍රියාත්මක Gවනු ඇත (එනම් "අවසාන පේළියට පනින්න"). බොහෝ විට පුනරාවර්තන නොවන සිතියම්ගත කිරීමක් පුළුල් කිරීමේ දාමයක යෙදේ (එය සිදුවීමට ඇති අවසාන ප්‍රසාරණය වනු ඇත).

හා සිතියම්ගත Gකිරීම ggඔබ විසින් නම් පමණි Gඔබ ඔබන්න නම්, නමුත් K. පුනරාවර්තව සිතියම් ගත කර Kඇත්ද යන්න නොසලකා මෙම සිතියම්ගත කිරීම සම්පීඩනයට බලපාන්නේ Gනැත, මන්ද එය 2 වන පේළියේ ප්‍රසාරණය Kනැවැත්වීමට හේතු වන බැවින් 3 වන පේළිය භාවිතා නොකෙරේ.


4
එක් දෙයක්: mapඅදාළ වන්නේ සාමාන්‍ය, දෘශ්‍ය, තේරීම් සහ ක්‍රියාකරු-අපේක්ෂිත මාතයන්ට පමණි, සියලු මාතයන්ට නොවේ.
බ්‍රයන් මැකට්චොන්

19

එක් වෙනසක් නම්:

  • :map කරන්නේ nvoසාමාන්ය + (දෘශ්ය + තෝරා) + ක්රියාකරු තෙක් ==
  • :map!කරන්නේ ic == ඇතුලත් කරන්න + විධාන රේඛාව මාදිලිය

help map-modesවගු වල සඳහන් පරිදි .

එබැවින්: mapසියලුම මාතයන් වෙත සිතියම් ගත නොකරයි .

සියලුම මාතයන් වෙත සිතියම් ගත කිරීම සඳහා ඔබට අවශ්‍ය වන්නේ :mapසහ :map!.


5
පරිස්සමින් !! command modeයනු තවත් historical normal modeතිහාසික නමකි . පරිච්ඡේදය 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). 'C' යන කෙටි යෙදුම 'විධාන රේඛාව' සඳහා වේ. වෙනත් වචන වලින් කිවහොත්, පෙරනිමියෙන්: ඇතුළු කිරීමේ + විධාන-ලයින් මාතයන් සඳහා map! lhs rhs පුනරාවර්තන ලෙස lhs rhs වෙත සිතියම් ගත කරයි . එය පෙරනිමි විකල්පය ~ / .vimrc සමඟ පැහැදිලිව අක්‍රිය කර නොමැති නම් පමණි. එවැනි අවස්ථාවක සිතියම්ගත කිරීම පුනරාවර්තන නොවේ (සුදුසු නොවේ). remapset noremap[!]
Cbhihe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.