Во многих сценариях, которые я пишу, я часто конструирую программы в «функциональном стиле».То есть вначале я в основном определяю множество функций, а потом применяю эти функции.Это приводит к последовательности вызовов вложенных функций, где я набираю:
- имя функции
- ее аргументы
- следующее имя функции
- ееаргументы
... и т. д.
Для случаев, когда функции "передаются по трубопроводу" вместе, вывод одной функции является аргументом (обычно первым, но не всегда) к следующей функции, вывод которой является аргументом следующей функции, и до бесконечности.В префиксной нотации движения клавиш могут быть очень резкими, если вы печатаете эту последовательность слева направо.Например, как бы вы набрали вторую строку следующего примера [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 я мог бы сделать что-то вроде
- [введите имя функции и аргументы]
- Ca
- [введите имя следующей функции]
- Ce
- [заполните остальные аргументы]
- Ca
- [введите имя следующей функции]
- Ce
- [заполните остальныеаргументы]
... и т. д. со случайным использованием Mb, Mf, M-DEL (обратное слово, прямое слово, обратное слово уничтожения), если я испорчу или забудучто-то.
Я недавно узнал о Co в vim, который спасает жизни - но я обнаружил, что эквивалентные ключи были бы
- [имя функции функции и аргументы]
- Co 0
- [введите следующее имя функции]
- Co $
- [заполните остальные аргументы]
- Co 0
- [введите следующее имя функции]
- Co $
- [заполните остальные аргументы]
... и остальные;Эквивалентами «обратное слово», «прямое слово» и «обратное убивание слова» будут Co b и Co w и Cw.
Так что это заставило меня задуматься о том, что для программирования на vim мне, возможно, придется увеличить большую рабочую память, чтобы я мог приостановить создание одной функции при заполнении другой и так далее в стеке.Кроме того, при создании текстовых документов я обнаруживаю, что редактирую (убиваю, копирую, дергаю) довольно часто, даже до того, как заканчиваю законченную мысль, что не так поддается операционному стилю vim «оставаться в обычном режиме, пакет текста во вставке»-mode и обратно в нормальный режим ", который, кажется, предполагает, что я способен производить что-то, что стоит редактировать во время моих вылазок в режиме вставки.Чтобы использовать vim, я считаю, что я больше думаю о том, чтобы печатать, чтобы уменьшить частоту переключения между режимами.Это потому, что я естественно спастичен, или когда я освою или передам подходящий диапазон команд клавиш vim в мышечную память, я перестану думать, что они такие разные?
Если вы программируете в обоих emacs иvim, ты находишь себя в разных редакторах и по-разному конструируешь свои программы и блоки текста?