En muchas secuencias de comandos que escribo, a menudo construyo programas en un "estilo funcional". Es decir, básicamente defino muchas funciones al principio y luego las aplico. Esto se traduce en una secuencia de llamadas a funciones anidadas, en el que escribo a cabo:¿Piensas/escribes de manera diferente en vim y emacs?
- nombre de la función
- sus argumentos
- siguiente nombre de la función
- sus argumentos
... y así en.
Para los casos en que las funciones se "interconectan" juntas, la salida de una función es un argumento (generalmente el primero, pero no siempre) para la siguiente función, cuyo resultado es un argumento para la siguiente función, y indefinidamente. En la notación de prefijo, los movimientos de tecla pueden ser muy nerviosos si escribe esta secuencia de izquierda a derecha. Por ejemplo, ¿cómo escribirías la segunda línea del siguiente ejemplo de [Python] (~ mul ~ es multiplicar, ~ truediv ~ es dividir)?
from operator import add, mul, truediv
print(truediv(mul(add(1,1),2),4))
Si tuviera que escribir el mismo conjunto de operaciones de forma lineal (de izquierda a escribir, sin saltar), estoy más probable que utilice la notación de la composición de funciones. Sobre la base de mi ejemplo anterior en Python, podría escribir
from functional import foldr, compose, partial, flip
print(foldr(compose,add,(partial(mul,2),partial(flip(truediv),4)))(1,1))
Creo que esto se debe a que asocio cada función con sus propios argumentos y prefiere escribir a cabo de forma sucesiva, en lugar de llenar los argumentos a otra función antes del argumento la lista para la primera función está completa (como se necesitaría para escribir el primer ejemplo de izquierda a derecha).
Lo noté porque he sido un usuario de emacs durante mucho tiempo y recientemente probé viper/vimpuse y vim. En emacs, podría hacer algo como
- [nombre de función y los argumentos]
- Ca
- [siguiente tipo de nombre de función]
- Ce
- [llene resto de argumentos]
- Ca
- [siguiente tipo de nombre de la función]
- Ce
- [llene resto de argumentos]
... y así sucesivamente, con el uso ocasional de Mb, Mf, M-DEL (backward-word, palabra hacia adelante, hacia atrás-kill-word) si me lío arriba u olvida algo.
Hace poco se enteraron de Co en vim, que es un salvavidas - pero me parece que las claves equivalentes serían
- [nombre del tipo de función y argumentos]
- Co 0
- [Tipo siguiente nombre de la función]
- Co $
- [rellenar resto de argumentos]
- Co 0
- [siguiente tipo de nombre de función]
- C-O $
- [llene resto de argumentos]
... y el resto; Los equivalentes de palabra hacia atrás, palabra directa y palabra de destino hacia atrás serían C-o b y C-o w, y C-w.
Esto me hizo pensar que para programar en vim, puede que tenga que hacer crecer una memoria de trabajo más grande, de modo que pueda detener la construcción de una función cuando complete otra, y así sucesivamente hasta la pila. Además, en la construcción de documentos de texto, me parece que edito (matar, copiar, tirar) con bastante frecuencia incluso antes de terminar un pensamiento completo, que no es tan fácil para el estilo operativo de vim de "permanecer en modo normal, ráfaga de texto en inserción -mode, y de vuelta al modo normal ", que parece suponer que soy capaz de producir algo que valga la pena editar durante mis incursiones en modo inserción. Para usar vim, me parece que delibere más mientras escribo para reducir la frecuencia de cambio de modo. ¿Esto es porque soy naturalmente espástico, o una vez que domino o comprometo un rango adecuado de comandos de teclas vim para la memoria muscular, dejaré de pensar que son tan diferentes?
Si programa tanto en emacs como en vim, ¿se encuentra pensando y construyendo sus programas y bloques de texto de manera diferente en cada editor?
Esta debería ser una wiki de la comunidad. –
Tienes razón, gracias. Cambiado – hatmatrix