与execute" normal一起使用时,奇怪的vim会记录行为

时间:2015-06-03 18:30:41

标签: vim

为什么以下命令不使用未命名寄存器中首次注册的内容(如果此内容是数字?)

execute "normal! cc".(@"+1)."\<esc>"

2 个答案:

答案 0 :(得分:0)

只要默认寄存器只包含 一个数字,这就有效。前导空格将导致字符串被评估为0

:echo "1" + 1
2
:echo " 1" + 1
1

您可以通过将字符串显式转换为数字来避免这种情况:

:echo str2nr(" 1") + 1
2

注意:如果您不关心'autoindent'的{​​{1}}行为,您也可以使用较低级cc

setline()

答案 1 :(得分:0)

字符串连接实际上是在执行之前完成的,这似乎是合乎逻辑的。以下代码具有我期望的行为。

normal! cc
execute "normal! ".(@"+1)."\<esc>"