繁体   English   中英

在 vim 中进行键映射时命令计数丢失

[英]count of command get lost when do key mapping in vim

我的 vimrc 文件中有一个p的键映射,如下所示:
noremap p <ESC>:set paste<CR>p:set nopaste<CR>

此键映射的目的是确保 vim 外部的内容可以在粘贴模式下以其原始格式粘贴。 并在粘贴完成后将其恢复为 nopaste 模式。

但是当我运行以下命令时:

yy
5p

p只执行一次,而不是 5 次。
看起来键映射中缺少计数。

有什么方法可以在键映射中传递计数?
或者如何解决这个问题?

第一个<ESC>删除计数,因此以后不可用。 而不是<ESC>我们将忽略并使用<cu>保存计数,稍后使用v:count1变量访问它,例如:<cu>set paste <CR>... v:count1...

但是还有另一个问题:在第一个<CR>之后 count 会丢失,所以我们想将映射重写为单个命令。 命令链可以用| , 但在映射中我们应该写<BAR>而不是| .

这是最终的映射:

:noremap p :<c-u>set paste <BAR> :exe "normal! " . v:count1 . "p" <BAR> :set nopaste<CR>

:exe "normal! "是一种从评估字符串执行命令的奇特方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM