Вы думаете / пишете по-разному в vim и emacs?

Во многих сценариях, которые я пишу, я часто строю программы в «функциональном стиле». То есть вначале я определяю множество функций, а потом применяю их. Это приводит к последовательности вызовов вложенных функций, при этом я печатаю:

  1. имя функции
  2. ее аргументы
  3. следующее имя функции
  4. ее аргументы

... и т. д.

Для случаев, когда функции «соединены» вместе, вывод одной функции является аргументом (обычно первым, но не всегда) следующей функции, вывод которой является аргументом следующей функции, и до бесконечности. В префиксной нотации движения клавиш могут быть очень скачкообразными, если вы набираете эту последовательность слева направо. Например, как бы вы напечатали вторую строку следующего примера [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 я мог бы сделать что-нибудь вроде

Я долгое время пользовался emacs и только недавно попробовал viper / vimpuse и vim. В emacs я мог бы сделать что-нибудь вроде

Я долгое время пользовался emacs и только недавно попробовал viper / vimpuse и vim. В emacs я мог бы сделать что-нибудь вроде

  1. [введите имя функции и аргументы]
  2. Ca
  3. [введите имя следующей функции]
  4. Ce
  5. [введите остальные аргументы]
  6. Ca
  7. [введите имя следующей функции]
  8. Ce
  9. [введите остальные аргументы]

... и так далее, с периодическим использованием Mb, Mf, M-DEL (backward-word, forward-word, backward-kill-word), если я напортачил или забыть что-то.

Недавно я узнал о Co в vim, которая спасает жизнь - но я обнаружил, что эквивалентными ключами будут

  1. [введите имя функции и аргументы]
  2. Co 0
  3. [введите имя следующей функции]
  4. Co $
  5. [введите остальные аргументы]
  6. Co 0
  7. [введите имя следующей функции]
  8. Co $
  9. [введите остальные аргументы]

... и остальное; эквивалентами обратного слова, прямого слова и обратного уничтожающего слова были бы Co b, Co w и Cw.

Это заставило меня подумать, что для программирования в vim мне, возможно, придется увеличить объем рабочей памяти, чтобы я мог приостанавливать создание одной функции при заполнении другой, и так далее по стеку. Кроме того, при создании текстовых документов я обнаружил, что довольно часто редактирую (уничтожаю, копирую, восстанавливаю) даже до того, как закончу полную мысль, что не очень подходит для стиля работы vim «оставаться в нормальном режиме, всплеск текста при вставке -mode и обратно в нормальный режим », который, кажется, предполагает, что я способен создать что-то стоящее редактирования во время моих набегов на режим вставки. Чтобы использовать vim, я обнаружил, что во время набора текста я уделяю больше внимания сокращению частоты переключения между режимами. Günter

10
задан neandr 20 September 2010 в 10:27
поделиться