【问题标题】:Do you think/write differently in vim and emacs?你在 vim 和 emacs 中的想法/写法有什么不同吗?
【发布时间】:2010-09-20 10:21:02
【问题描述】:

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

  1. 函数名
  2. 它的论点
  3. 下一个函数名
  4. 它的论点

...等等。

对于函数“管道”在一起的情况,一个函数的输出是下一个函数的参数(通常是第一个,但不总是),下一个函数的输出是下一个函数的参数,而 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 中,我可能会做类似的事情

  1. [键入函数名称和参数]
  2. C-a
  3. [键入下一个函数名称]
  4. C-e
  5. [填写其余参数]
  6. C-a
  7. [键入下一个函数名称]
  8. C-e
  9. [填写其余参数]

...等等,如果我搞砸了或忘记了什么,偶尔使用 M-b、M-f、M-DEL(后向词、前向词、后向杀词)。

我最近发现了 vim 中的 C-o,这是一个救命稻草 - 但我发现等效键是

  1. [键入函数名称和参数]
  2. C-o 0
  3. [键入下一个函数名称]
  4. C-o $
  5. [填写其余参数]
  6. C-o 0
  7. [键入下一个函数名称]
  8. C-o $
  9. [填写其余参数]

...还有其他的;后向词、前向词和后向杀词等价物将是 C-o b 和 C-o w 以及 C-w。

所以这让我想到要在 vim 中编程,我可能需要增加更大的工作内存,这样我就可以在填写另一个函数时暂停一个函数的构造,以此类推。另外,在构建文本文档时,我发现我甚至在完成一个完整的想法之前就非常频繁地编辑(杀死、复制、拉动),这与 vim 的“停留在正常模式,插入时突发文本”的操作风格不太符合模式,然后回到正常模式”,这似乎假设我在尝试插入模式期间能够产生值得编辑的东西。在使用 vim 时,我发现我在输入时会更加慎重,以减少模式之间切换的频率。这是因为我天生痉挛,还是一旦我掌握或提交了适当范围的 vim 键盘命令来增强肌肉记忆力,我就不会再认为它们如此不同了?

如果您同时使用 emacs 和 vim 进行编程,您是否发现自己在每个编辑器中以不同的方式思考和构建程序和文本块?

【问题讨论】:

  • 这应该是一个社区维基。
  • 你是对的 - 谢谢。改变了。

标签: vim emacs


【解决方案1】:

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

我一直试图找到方法来做我打算做的事情。我不会让我的编辑强迫我做我不想做的事情。当我对一段新代码进行过程编程时,我使用了一种称为“一厢情愿”的技术,即mentioned in Structure and Interpretation of Computer Programs

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

【讨论】:

  • 谢谢 - 是的,SICP。我猜我也为 C 或 Fortran 代码这样做。您还强调了我的根本问题,即编辑器是否会改变您的思维方式……
猜你喜欢
  • 2014-01-10
  • 2013-10-19
  • 2015-08-05
  • 2010-09-14
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多