在我写的许多脚本中,我经常以“函数式风格”构建程序。也就是说,我基本上在开头定义了许多函数,然后稍后应用这些函数。这导致了一系列嵌套的函数调用,其中我会输入:
对于那些“管道”在一起的函数,一个函数的输出通常是下一个函数的参数(通常是第一个,但不总是),输出又成为下一个函数的参数,以此类推。在前缀表示法中,如果您从左到右键入此序列,则关键操作可能非常跳跃。例如,您将如何键入以下[Python]示例的第二行(~mul~是乘法,~truediv~是除法)?
我认为这是因为我将每个函数与其自己的参数相关联,并且更喜欢连续输入它们,而不是在填写第一个函数的参数列表之前,将参数填充到另一个函数中(如从左到右键入第一个示例所需的那样)。
我注意到这一点是因为我长期以来一直是emacs用户,最近才尝试了viper / vimpuse和vim。在emacs中,我可能会做类似以下的事情:
1. [输入函数名称和参数] 2. C-a 3. [输入下一个函数名称] 4. C-e 5. [填写其余参数] 6. C-a 7. [输入下一个函数名称] 8. C-e 9. [填写其余参数]
等等,如果我出错或忘记了某些内容,就会偶尔使用M-b,M-f,M-DEL(backward-word,forward-word,backward-kill-word)。
我最近发现了vim中的C-o,这是一个救命稻草 - 但我发现等效的按键将是:
1. [输入函数名称和参数] 2. C-o 0 3. [输入下一个函数名称] 4. C-o $ 5. [填写其余参数] 6. C-o 0 7. [输入下一个函数名称] 8. C-o $ 9. [填写其余参数]
等等; backward-word,forward-word和backward-kill-word的等效项将是C-o b和C-o w,以及C-w。
所以这让我想到,要在vim中编程,我可能需要扩大工作记忆,以便我可以暂停一个函数的构建,同时填写另一个函数,并一直向下堆栈。此外,在构建文本文档时,我发现我经常进行编辑(kill,copy,yank),甚至在完成完整思想之前就频繁进行编辑,这对于vim的操作风格“保持正常模式,插入模式中的文本突发,然后回到正常模式”来说并不那么方便,这似乎假定我能够在进入插入模式期间产生值得编辑的内容。为了使用vim,我发现自己在输入时更加谨慎,以减少模式之间的切换频率。这是因为我天生就是神经质的原因,还是一旦我掌握或将适当范围的vim键命令记忆到肌肉中,我就会停止认为它们如此不同?
如果您在emacs和vim中编程,您是否发现自己在每个编辑器中以不同的方式思考和构建程序和文本块?
- 函数名称
- 其参数
- 下一个函数名称
- 其参数
对于那些“管道”在一起的函数,一个函数的输出通常是下一个函数的参数(通常是第一个,但不总是),输出又成为下一个函数的参数,以此类推。在前缀表示法中,如果您从左到右键入此序列,则关键操作可能非常跳跃。例如,您将如何键入以下[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中,我可能会做类似以下的事情:
1. [输入函数名称和参数] 2. C-a 3. [输入下一个函数名称] 4. C-e 5. [填写其余参数] 6. C-a 7. [输入下一个函数名称] 8. C-e 9. [填写其余参数]
等等,如果我出错或忘记了某些内容,就会偶尔使用M-b,M-f,M-DEL(backward-word,forward-word,backward-kill-word)。
我最近发现了vim中的C-o,这是一个救命稻草 - 但我发现等效的按键将是:
1. [输入函数名称和参数] 2. C-o 0 3. [输入下一个函数名称] 4. C-o $ 5. [填写其余参数] 6. C-o 0 7. [输入下一个函数名称] 8. C-o $ 9. [填写其余参数]
等等; backward-word,forward-word和backward-kill-word的等效项将是C-o b和C-o w,以及C-w。
所以这让我想到,要在vim中编程,我可能需要扩大工作记忆,以便我可以暂停一个函数的构建,同时填写另一个函数,并一直向下堆栈。此外,在构建文本文档时,我发现我经常进行编辑(kill,copy,yank),甚至在完成完整思想之前就频繁进行编辑,这对于vim的操作风格“保持正常模式,插入模式中的文本突发,然后回到正常模式”来说并不那么方便,这似乎假定我能够在进入插入模式期间产生值得编辑的内容。为了使用vim,我发现自己在输入时更加谨慎,以减少模式之间的切换频率。这是因为我天生就是神经质的原因,还是一旦我掌握或将适当范围的vim键命令记忆到肌肉中,我就会停止认为它们如此不同?
如果您在emacs和vim中编程,您是否发现自己在每个编辑器中以不同的方式思考和构建程序和文本块?