【发布时间】:2010-09-20 10:21:02
【问题描述】:
在我编写的许多脚本中,我经常以“函数式”构造程序。也就是说,我一开始基本上是定义了很多函数,然后再应用这些函数。这会导致一系列嵌套函数调用,我在其中输入:
- 函数名
- 它的论点
- 下一个函数名
- 它的论点
...等等。
对于函数“管道”在一起的情况,一个函数的输出是下一个函数的参数(通常是第一个,但不总是),下一个函数的输出是下一个函数的参数,而 ad无限。在前缀符号中,如果您从左到右输入此序列,则键移动可能会非常跳跃。例如,您将如何输入以下 [Python] 示例的第二行(~mul~ 是乘法,~truediv~ 是除法)?
from operator import add, mul, truediv
print(truediv(mul(add(1,1),2),4))
如果我必须以线性方式编写相同的一组操作(从左到右编写,不要跳来跳去),我更有可能使用函数组合的表示法。基于我之前的 Python 示例,我可能会编写
from functional import foldr, compose, partial, flip
print(foldr(compose,add,(partial(mul,2),partial(flip(truediv),4)))(1,1))
我认为这是因为我将每个函数与它自己的参数相关联并且更喜欢连续输入它们,而不是在第一个函数的参数列表完成之前将参数填充到另一个函数(因为需要输入第一个例子从左到右)。
我注意到这一点是因为我已经使用 emacs 很长时间了,并且最近才尝试过 viper/vimpuse 和 vim。在 emacs 中,我可能会做类似的事情
- [键入函数名称和参数]
- C-a
- [键入下一个函数名称]
- C-e
- [填写其余参数]
- C-a
- [键入下一个函数名称]
- C-e
- [填写其余参数]
...等等,如果我搞砸了或忘记了什么,偶尔使用 M-b、M-f、M-DEL(后向词、前向词、后向杀词)。
我最近发现了 vim 中的 C-o,这是一个救命稻草 - 但我发现等效键是
- [键入函数名称和参数]
- C-o 0
- [键入下一个函数名称]
- C-o $
- [填写其余参数]
- C-o 0
- [键入下一个函数名称]
- C-o $
- [填写其余参数]
...还有其他的;后向词、前向词和后向杀词等价物将是 C-o b 和 C-o w 以及 C-w。
所以这让我想到要在 vim 中编程,我可能需要增加更大的工作内存,这样我就可以在填写另一个函数时暂停一个函数的构造,以此类推。另外,在构建文本文档时,我发现我甚至在完成一个完整的想法之前就非常频繁地编辑(杀死、复制、拉动),这与 vim 的“停留在正常模式,插入时突发文本”的操作风格不太符合模式,然后回到正常模式”,这似乎假设我在尝试插入模式期间能够产生值得编辑的东西。在使用 vim 时,我发现我在输入时会更加慎重,以减少模式之间切换的频率。这是因为我天生痉挛,还是一旦我掌握或提交了适当范围的 vim 键盘命令来增强肌肉记忆力,我就不会再认为它们如此不同了?
如果您同时使用 emacs 和 vim 进行编程,您是否发现自己在每个编辑器中以不同的方式思考和构建程序和文本块?
【问题讨论】:
-
这应该是一个社区维基。
-
你是对的 - 谢谢。改变了。