在vim和emacs中,您是否有不同的想法/编写方式?

在vim和emacs中,您是否有不同的想法/编写方式?,vim,emacs,Vim,Emacs,在我编写的许多脚本中,我经常以“函数式”的方式构造程序。也就是说,我一开始基本上定义了很多函数,然后应用这些函数。这将导致一系列嵌套函数调用,其中我键入: 函数名 它的论点 下一个函数名 它的论点 ……等等 对于函数被“管道”连接在一起的情况,一个函数的输出是下一个函数的参数(通常是第一个,但不总是),其输出是下一个函数的参数,并且是无限的。在前缀表示法中,如果从左到右键入此序列,则键的移动可能会非常跳跃。例如,您将如何键入以下[Python]示例的第二行(~mul~是乘法,~truediv~是

在我编写的许多脚本中,我经常以“函数式”的方式构造程序。也就是说,我一开始基本上定义了很多函数,然后应用这些函数。这将导致一系列嵌套函数调用,其中我键入:

  • 函数名
  • 它的论点
  • 下一个函数名
  • 它的论点
  • ……等等

    对于函数被“管道”连接在一起的情况,一个函数的输出是下一个函数的参数(通常是第一个,但不总是),其输出是下一个函数的参数,并且是无限的。在前缀表示法中,如果从左到右键入此序列,则键的移动可能会非常跳跃。例如,您将如何键入以下[Python]示例的第二行(~mul~是乘法,~truediv~是除法)

    如果我必须线性地编写同一组操作(从左到右,不跳跃),我更可能使用函数组合的符号。在前面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-OB和C-OW,以及C-w

    这让我想到,要在vim中编程,我可能需要增加一个更大的工作内存,这样我可以在填充另一个函数时暂停一个函数的构造,依此类推。此外,在构建文本文档时,我发现我甚至在完成一个完整的想法之前就经常编辑(kill、copy、yank),这与vim的“保持在正常模式、插入模式下突发文本和返回正常模式”的操作风格不太相符,这似乎是在假设我能够在插入模式中生成一些值得编辑的内容。为了使用vim,我发现我在打字时更仔细地考虑减少模式之间切换的频率。这是因为我天生痉挛,还是一旦我掌握或向肌肉记忆提交了一系列合适的vim键命令,我就不再认为它们如此不同了


    如果您同时使用emacs和vim编程,您是否发现自己在每个编辑器中对程序和文本块的思考和构造都有所不同?

    我从1992年的好日子开始使用vi,现在从2001年开始使用emacs。在编写函数和代码块时,我没有注意到我的思维有任何不同。两位编辑都有自己的特点和做事方式,但他们的能力不足以改变你的思维方式和编程方式

    我总是想办法去做我想做的事。我不会让编辑强迫我做我不想做的事情。当我对一段新代码进行程序化编程时,我使用了一种称为“一厢情愿”的技术,即:


    你想象自己在一个完美的世界里,拥有你所需要的一切程序。您可以使用所有需要实现但目前只有原型的有用函数来编写算法。这类似于自上而下的方法。

    这应该是一个社区wiki。你说得对-谢谢。已更改。谢谢-是的,SICP。我想对于C或Fortran代码也是这样。你还突出了我的基本问题,那就是编辑是否会改变你的思维方式。。。
    from functional import foldr, compose, partial, flip
    print(foldr(compose,add,(partial(mul,2),partial(flip(truediv),4)))(1,1))