我正在尝试在vim中制作一个简单的映射,以使z密钥插入4个空格。我有
map z 4i <esc>l
Run Code Online (Sandbox Code Playgroud)
如果输入z,它将按预期工作。即使z多次键入也能按预期工作。但是当我使用类似的东西2z插入24个空格时,1z插入14个空格。每次尝试使用中继器时,它都会插入10倍的中继器空格,然后再插入4个空格。
我的地图出问题了吗?我想2z插入8个空格,3z插入12个空格,依此类推。
编辑:@ merlin2011弄清楚了为什么我的映射行为异常,并提出了解决我的问题的可行解决方案。@PeterRincker正确推断出地图的意图是缩进。使用建议>>比进行一些.vimrc修改的映射要好:
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
Run Code Online (Sandbox Code Playgroud)
上述选项允许我不必重新映射任何键和拍照的功能已经充分利用>,<,>>,<<的命令。我认为这是解决该问题的更好方法。
来源:将制表符转换为空格
将数字放在映射命令的前面时,就好像您在数字之后立即键入了该映射命令一样。
特别是,您的命令2z将变为24i <esc>l,这将为您提供24个空格。
在中记录了此行为:help map-examples。
一种解决方法是在映射中使用4个文字空间。
map z i <Esc>l
Run Code Online (Sandbox Code Playgroud)
另一个是使用函数并使用映射调用该函数。
function! Insert(m)
let l:count = a:m*4
execute "normal a" . repeat (" ", l:count)
endfunction
map z :<C-U>call Insert(v:count1)<CR>
Run Code Online (Sandbox Code Playgroud)