Вы думаете / пишете по-разному в vim и emacs? - PullRequest
9 голосов
/ 20 сентября 2010

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

  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 я мог бы сделать что-то вроде

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

... и т. д. со случайным использованием Mb, Mf, M-DEL (обратное слово, прямое слово, обратное слово уничтожения), если я испорчу или забудучто-то.

Я недавно узнал о 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, я считаю, что я больше думаю о том, чтобы печатать, чтобы уменьшить частоту переключения между режимами.Это потому, что я естественно спастичен, или когда я освою или передам подходящий диапазон команд клавиш vim в мышечную память, я перестану думать, что они такие разные?

Если вы программируете в обоих emacs иvim, ты находишь себя в разных редакторах и по-разному конструируешь свои программы и блоки текста?

1 Ответ

4 голосов
/ 21 сентября 2010

Я использовал vi из старых добрых дней 1992 года, а теперь использую Emacs с 2001 года. Я не заметил различий в своем мышлении при программировании функций и блоков кода.Оба редактора имеют свои особенности и способы ведения дел, но они не настолько сильны, чтобы изменить ваш образ мышления и способ программирования.

Я всегда пытался найти способы сделать то, что я намереваюсьсделать.Я не позволяю своему редактору заставлять меня делать то, чего я не хочу.Когда я занимаюсь процедурным программированием нового фрагмента кода, я использую технику, называемую «желаемое за действительное», которая упоминается в разделе «Структура и интерпретация компьютерных программ» :

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...