gpt4 book ai didi

vim - 为什么带数字参数的 vim 映射执行的次数比预期多?

转载 作者:行者123 更新时间:2023-12-02 09:34:25 26 4
gpt4 key购买 nike

我正在尝试在 vim 中制作一个简单的 map ,以获得 z键插入 4 个空格。我有

map z 4i <esc>l

如果我输入 z ,它按预期工作。甚至输入z多次按预期工作。但是当我使用像 2z 这样的东西时它插入 24 个空格,1z插入 14 个空格。每次我尝试使用中继器时,它都会插入 10 倍中继器空格,然后再插入 4 个空格。

我的 map 有问题吗?我要2z插入 8 个空格,3z插入 12 个空格,依此类推。

编辑:@merlin2011 找出了为什么我的映射行为不当,并为我的问题提出了一个可行的解决方案。@PeterRincker 正确地推断出 map 的目的是为了缩进。建议使用>>比一些 .vimrc 的映射更好修改:

set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4

上述选项使我不必重新映射任何键并充分利用已经功能的 > , < , >> , <<命令。我认为这是解决问题的更好方法。

来源:Converting tabs to spaces

最佳答案

当您将数字放在映射命令前面时,就好像您在数字之后立即键入了该映射命令一样。

特别是,您的命令 2z变成24i <esc>l ,这将为您提供 24 个空格。

此行为记录在 :help map-examples 中.

一种解决方法是在映射中使用 4 个文字空格。

map z i    <Esc>l

另一种方法是使用函数并使用映射调用该函数。

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>

参见this page供引用。

关于vim - 为什么带数字参数的 vim 映射执行的次数比预期多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28555301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com