挑战"每行一个号码"在VimGolf:#82解决方案如何运作?

时间:2016-08-31 14:03:49

标签: vim

challenge的第82个解决方案包含如下所示的片段:

V"=[<C-R><C-A>]<CR>p

我认为这里V进入同样的视觉模式,然后帮助文档说明了

    When typing the '=' after " or CTRL-R the cursor moves to the command-line,
where you can enter any expression (see |expression|).  All normal
command-line editing commands are available, including a special history for
expressions.  When you end the command-line by typing <CR>, Vim computes the
result of the expression.  If you end it with <Esc>, Vim abandons the
expression.  If you do not enter an expression, Vim uses the previous
expression (like with the "/" command).

然后我感到困惑:表达式是否以输入结束,因此看起来像[,之后我们按ctrl-a

如果我重复上面的顺序,会发生一些奇怪的行为,我不认为是预期的。所以我一定错过了重要的事情。

提前感谢您的任何帮助或参考。

1 个答案:

答案 0 :(得分:3)

"=将评估给定的表达式,如果p(paste)将评估的结果转换为字符串。如果您进一步阅读该文档,您将看到:

  

表达式必须求值为String。数字始终是自动的   转换为String。对于“p”和“:put”命令,如果结果是a   浮动它转换成一个字符串。如果结果是List,则每个元素都是   变成一个字符串并用作一行。字典或FuncRef结果   一条错误消息(使用string()进行转换)。

<c-r><c-a>将填充光标下的WORD

所以表达式是[---...---2,3,5,..]这个表达式是什么?这是一个清单。正如文档告诉我们的那样,当您p粘贴时,它将被转换为线条。

这里最棘手的是列表中的第一个元素-------...-2

我们有:

   2 -> 2
  -2 -> -2
 --2 -> 2
---2 -> -2
.....

现在你可以算一下-之前2的数量,我认为它必须是偶数。所以我们在粘贴后的第一行有2

我希望现在你能更好地理解它。