Harita, noremap, kısaltma ve noreabbrev komutları arasındaki farklar nelerdir?


19

Bu komutlar bir dizi tuş vuruşunu başka bir şekilde dönüştürür, ancak bir durum için en uygun olanın biraz bulanık olduğunu düşünüyorum. Ayrıca !, bunların varyantları da vardır. Şu anda, onları kullanmam oldukça gelişigüzel, bu yüzden her biriyle ilgili tuzakların ne olduğunu öğrenebilir miyim? Peter Rincker öğrendim beri çeşitli mod sürümleri hakkında belirli notlarda, yararlı olabilecek bir yorumdacmap ben kullanıyorum ne zaman ve sadece çizgi hemen hemen hiçbir yerinde genişletebilirsiniz :komutları. Potansiyel tuzaklara karşı ne gibi önlemler alabilirim?


Sonraki bölüm biraz meta: Bu sitede cevap verirken hangi formu kullanmalıyız? - Bunu Meta'da sormalı mıyım yoksa soruya mı eklemeliyim?
muru

Ben buna bağlı olduğunu söyleyebilirim. Bir eşleme gösterirseniz her zaman noremap sürümünü kullanırdım. Bu şekilde insanlar, özyinelemeli eşlemeleri yinelemeli sürümler üzerinde kullanma alışkanlığına sahip olurlar. Elbette, haritayı özellikle bir <Plug> eşlemesinde kullanmak için bir neden yoktur.
akshay

Yanıtlar:


21

İlk olarak mapve noremapher birinin normal, görsel, seçim ve operatör bekleyen modları için eş zamanlı eşlemeler oluşturması benzerdir . Vim bu konuda ayrıntılar veriyor :help map-overview:

Overview of which map command works in which mode.  More details below.
     COMMANDS                    MODES ~
:map   :noremap  :unmap     Normal, Visual, Select, Operator-pending
:nmap  :nnoremap :nunmap    Normal
:vmap  :vnoremap :vunmap    Visual and Select
:smap  :snoremap :sunmap    Select
:xmap  :xnoremap :xunmap    Visual
:omap  :onoremap :ounmap    Operator-pending
:map!  :noremap! :unmap!    Insert and Command-line
:imap  :inoremap :iunmap    Insert
:lmap  :lnoremap :lunmap    Insert, Command-line, Lang-Arg
:cmap  :cnoremap :cunmap    Command-line

Yukarıdaki yardıma göre, eşlemeyi belirli bir modla kısıtlamak istiyorsanız, şunu eklemeniz gerekir:

'n' (normal için), 'v' (görsel ve seçim için), 'c' (komut için), 'x' (görsel mod için), 's' (seçim için), 'o' (operatör beklemede) ).

Örneğin,

nmap n nzz

normal bir mod oluşturur, özyinelemeli eşleme n.

Şimdi, noremapsadece özyinelemeli bir sürümü map.

Peki, özyinelemesiz haritalama nedir? Vim de bunun cevabına sahiptir :help map-recursive:

If you include the {lhs} in the {rhs} you have a recursive mapping.  When
{lhs} is typed, it will be replaced with {rhs}.  When the {lhs} which is
included in {rhs} is encountered it will be replaced with {rhs}, and so on.
This makes it possible to repeat a command an infinite number of times.  The
only problem is that the only way to stop this is by causing an error.  The
macros to solve a maze uses this, look there for an example.  There is one
exception: If the {rhs} starts with {lhs}, the first character is not mapped
again (this is Vi compatible).
For example: >
   :map ab abcd
will execute the "a" command and insert "bcd" in the text.  The "ab" in the
{rhs} will not be mapped again.

Bunun bir örneği aşağıdakileri eşlemektir:

:imap j k

:imap k j

Şimdi, vim j'yi k ve k ile sonsuz sayıda j ile değiştirecek ve bu nedenle size yinelemeli eşleme oluşturduğunuzda bir hata gösterecektir.

Bu nedenle, genellikle her zaman ( <Plug>eşlemeleriniz veya benzerleriniz hariç ) özyinelemesiz eşlemeler kullanmanız önerilir. Bu, yanlışlıkla yinelemeli eşlemeler oluşturduğunuzda Vim'in asılı kalmasını önler. Özyinelemesiz eşleme, bu nedenle Vim'deki komutları eşlemenin daha güvenli bir yoludur.

Yukarıdaki bilgilerle, bunun :noreabbrevsadece :abbrevkomutun özyinelemeli olmayan bir versiyonu olduğunu görebiliriz .

Sen kullanabilirsiniz :abbrev, sadece ekleme değiştirin ve komut modları. :abbrevkısaltmalar oluşturmak için kullanılır (Vim'in genişletebileceği kısayollar olarak da bilinir). Kısa genişleme :map/ :noremapeşlemeleri oluşturmak, :abbrev/ :noreabbrevkısaltmalar oluşturmak veya Vim'in yazınızı genişletmesini istediğiniz zaman kullanmaktır.


1
Asmaktan kaçınmak noremap komutunun formlarını kullanmanın tek nedeni değildir . Bunları kullanmanın bir başka (ve bence daha önemli) nedeni, haritalarınızı güvenilir / öngörülebilir hale getirmeleridir. Düz formu kullanırsanız ve rhsbaşka bir şeyle eşleştirilen bir anahtar içeriyorsa, eşlemeniz beklenenden tamamen farklı bir davranışa sahip olabilir.
Zengin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.