Vim:使用v:count1作为映射的参数

Vim:使用v:count1作为映射的参数,vim,arguments,mapping,Vim,Arguments,Mapping,我有一个如下的映射,将光标移动到表中输入/更新(红色圆圈)区域的第一列。如果需要,我可以键入w或ww进入第二列/第三列 noremap 0f\| ew 它首先转到定位点|绿色数字的末尾,然后移动到下一个单词(可以是点、数字或表达式),如下表所示 我想知道我是否可以使用普通模式命令前面给出的计数,通过命令2或3直接到达第二列或第三列 以下代码不起作用,尽管@=有助于将计数与0命令分开 noremap@='0f\| ew' 我在帖子中研究了Karkat的答案,并绘制了以下地图: noremap &

我有一个如下的映射,将光标移动到表中输入/更新(红色圆圈)区域的第一列。如果需要,我可以键入
w
ww
进入第二列/第三列

noremap 0f\| ew

它首先转到定位点
|
绿色数字的末尾,然后移动到下一个单词(可以是点、数字或表达式),如下表所示

我想知道我是否可以使用普通模式命令前面给出的计数,通过命令
2
3
直接到达第二列或第三列

以下代码不起作用,尽管
@=
有助于将计数与
0
命令分开

noremap@='0f\| ew'

我在帖子中研究了Karkat的答案,并绘制了以下地图:

noremap <expr> <s-F8> '0f\|e' . v:count1 . 'W'
noremap'0f\| e'。五:倒一。”W'
但如果给出一个计数,它不会移动。(如果没有计数,则会移到第1列。)


在这种映射中使用
v:count1
的正确方法是什么?

使用
:execute STRING
命令将
v:count1
包含在字符串中:

noremap <silent> <s-F8> :<c-u>exe 'norm 0f\|e' . v:count1 . 'W'<cr>
noremap:exe'norm 0f\|e'。五:倒一。”W'
注意:CTRL-U用于删除Vim可能插入的范围。

对于您的
版本,您需要
来帮助取消计数(类似于CTRL-U):

noremap'0f\| e'。五:倒一。”W'

太棒了!它就像一个符咒。我已经尝试了
方法,但仍然很棘手。
:h map expr
文档帮不了什么忙。哇!我不知道这个案子需要什么!看起来问题源于它——类似于“20f |”的东西碰巧在那里(Vim的逻辑)。非常感谢你!这个答案修复了我的映射。你的两个答案都很好!然而,看起来我不能“接受”这两者。。。为了保持文字流畅,我会接受你的第一个答案。没关系。为了使这两个版本更容易比较,我在这个映射前面加了一个。
noremap <silent> <expr> <s-F8> '<esc>0f\|e' . v:count1 . 'W'