Vim 让lnoremap(带L)工作

Vim 让lnoremap(带L)工作,vim,Vim,是否需要为lnoremap(l在这里是最重要的)工作设置任何特殊的先决条件 我已经使用map来交换数字键和它们的符号(因为符号的书写频率更高)。我成功地使用了noremap和noremap可以毫无问题地交换这些密钥 我注意到映射在f中没有生效。最近,我了解了r,发现映射也不会因此生效。在mapmode-l的帮助下: Some commands work both in Insert mode and Command-line mode, some not: commands:

是否需要为
lnoremap
l
在这里是最重要的)工作设置任何特殊的先决条件

我已经使用map来交换数字键和它们的符号(因为符号的书写频率更高)。我成功地使用了
noremap
noremap
可以毫无问题地交换这些密钥

我注意到映射在
f
中没有生效。最近,我了解了
r
,发现映射也不会因此生效。在
mapmode-l
的帮助下:

Some commands work both in Insert mode and Command-line mode, some not:

    commands:                                 modes: ~
                                          Insert  Command-line  Lang-Arg ~
:map!  :noremap!  :unmap!  :mapclear!       yes        yes         -
:imap  :inoremap  :iunmap  :imapclear       yes         -          -
:cmap  :cnoremap  :cunmap  :cmapclear        -         yes         -
:lmap  :lnoremap  :lunmap  :lmapclear       yes*       yes*       yes*
然后继续(在
语言映射中
):

这似乎是完美的映射类型。因为
lnoremap
应该也映射到Insert和命令行,所以我尝试替换
noremap带有
lnoremap
。结果是,Lang Arg、Insert和命令行都不再具有这种映射


我的问题是,在使用
lnoremap
之前,是否需要设置一些特定的设置?
lnoremap
yes
es旁边的那些
*
是什么?这是否意味着“是”是有条件的?如果是这样会怎样?

您可以在插入模式下通过
打开/关闭语言映射的使用,或者通过

:set iminsert=1
有关详细说明,请参见
:help i_CTRL-^
:help'iminsert'
。这种切换的原因是一些用户只希望在某些情况下应用语言映射(或特定语言的整体键映射)

对于命令行模式,您还需要

:set imcmdline

谢谢这使得它可以在插入模式和
f
r
下工作,但不能在命令行上工作。我添加了
cnoremap
来完成它(但仍然不知道为什么
lnoremap
没有自己做
cnoremap
)@Shahbaz随机猜测:尝试设置
'imcmdline'
@mMontu,实际上它不起作用(尽管我发现
set imsearch=1
(或-1)修复了搜索。(我正在使用vim 7.3,不幸的是在windows下)。无论如何,
cnoremap
解决了这个问题。好吧,似乎这还不是全部。如果我录制了一个宏,其中我在插入模式下输入了其中一个键,或者在
f
之后使用它,那么重放宏将使用原始键而不是映射的键。例如,在
d
之后使用它们没有这个问题。当我以前使用
inoremap
在过去,这种情况没有发生。因此,似乎
lnoremap
with
iminsert=1
inoremap
@Shahbaz并不完全相同。我会尝试一个更新的版本,它可能工作得更好。我使用的是Vim 7.4——如果你提供一个测试过程,我可以检查它。
:set imcmdline