emacs - ¿Cómo se escribe lisp de manera eficiente, con tantos paréntesis?
scheme touch-typing (16)
Con muchos diseños de teclado no estadounidenses, escribir corchetes o llaves es incluso más engorroso que escribir paréntesis, lo que hace que la programación en la mayoría de los idiomas sea muy tensa, así que considérese afortunado. ;)
En cuanto a mí, uso una distribución de teclado no estándar amigable para programadores que me permite escribir paréntesis a través de [Super] -j y [Super] -k.
Trato de mantener mis dedos en la fila de inicio tanto como sea posible.
Escribir todos los paréntesis me hace alejarme un poco.
Yo uso Emacs; los paréntesis mismos no son un problema, me siento cómodo con ellos. Y no me gustan los modos que mecanografían automáticamente para mí.
He pensado en reasignar los corchetes entre paréntesis y viceversa. ¿Es esta una buena idea? ¿Qué hacen todos los demás?
Cuando estoy escribiendo código, generalmente paso mucho más tiempo pensando y leyendo mi código, que escribiendo. En el pasado, he intentado cambiar el diseño del teclado de Dvorak, pero me falta motivación porque puedo escribir mucho más rápido de lo que puedo pensar. La sintaxis del lenguaje de programación es un problema similar, siempre que pueda escribir el código sin abandonar el teclado (es decir, usar el mouse sería malo), estoy contento.
Intenté reasignar en Emacs, pero crea nuevos problemas: digamos que estás editando en una ventana de terminal a través de ssh y pegas un fragmento en la ventana; a continuación, los paréntesis y los corchetes se intercambian al pegar, no solo al tipear. Si intenta esto, reasigne en un nivel inferior en su sistema, como xmodmap.
(Por supuesto, el otro problema obvio es usar otras computadoras sin su reasignación. Eso también fue una molestia, aunque soportable).
Si usa los paréntesis más que los corchetes, por supuesto, reasigne lejos. No veo cómo podría plantear más problemas que, por ejemplo, un zurdo cambiando los botones del mouse.
Tengo pedales. LeftFoot = abrir paren, RightFoot = cerrar paren.
Bueno, yo no, pero no uso Lisp. Aunque no parece una mala idea.
¿Podrías imaginar una variación en Lisp que usara indentación en lugar de parens? (tomando una página de la especificación de Python)
Tengo que sacar mis dedos de la fila de inicio para llegar a todos los demás operadores de número de turno, así que nunca pensé demasiado en eso.
Y una vez que tecleas un parche izquierdo, los parásitos eléctricos te dan el derecho.
También cambié mi diseño de teclado (dvorak) (a través de xmodmap) para cambiar los corchetes ("[]") y parens, junto con paredit-mode
(que de hecho toma algún tiempo acostumbrarse).
"... tantas parentelas"
Lo primero que hice fue vincular la ''('' clave de la secuencia ''('' + '')'' + derecha (), por lo que el auto balanceo de mi paréntesis, dejando la mitad restante para escribir al escribir el nuevo código.
También desea una forma conveniente de navegar un paréntesis - unir C-] a la búsqueda de secuencia ('')'') + derecha (). Ahora el autor se vuelve más corto, ya que no necesita alejarse de la posición de inicio, simplemente escriba C-] cada vez que completa un S-expr.
Lo siguiente que hice fue vincular una clave a una subrutina que empuja un elemento existente a la lista actual ... así que si // es la posición del cursor, entonces este comando transformará:
(if (< //) (+ x 1)
(x)
(y))
a
(if (< (+ x 1) //)
(x)
(y))
Empujar efectivamente un elemento de la derecha a la lista actual, muy útil para editar el código existente. La secuencia ''('', ''<'', CS-], Espacio, ''2'' agrega "compare menos de 2" a una expresión existente. Combinado con C-], esto le permite construir nuevas expresiones muy rápidamente a partir de las existentes.
@jamesnvc, no pensé en atar () a las teclas [] ... ¡Tendré que intentarlo, gracias!
Remaché [] a () con xmodmap y me gusta. Fue un poco extraño acostumbrarse a escribir código en idiomas que usan [], pero como cualquier cambio, te acostumbras. Tener parientes no desplazados en Lisp es mejor que no tener paréntesis no desplazados en otros idiomas, así que funciona.
De todos modos, aquí está el encantamiento xmodmap necesario para mi teclado de EE. UU .:
!! swap () and []
keycode 18 = 9 bracketleft
keycode 19 = 0 bracketright
keycode 34 = parenleft braceleft
keycode 35 = parenright braceright
Uso paredit y pair-mode packages pero, para el tipaje rápido de paréntesis, uso electric-dot-and-dash para reemplazar un doble período en a () con un retraso de 5 ms (si escribo despacio, obtengo dos puntos). Es un paquete maravilloso (pirateé un poco para mi preferencia personal; cuando escribo con el teclado Dvorak, reemplacé la tecla del tablero por una barra (// no es tan común en el ceceo)).
Para evitar el desorden en los parientes, agrego un paquete llamado ''highlight-parentheses'' a mi conjunto de herramientas, y para una máxima eficiencia en sexp grabbings o navegación de texto en general, también uso vimpulse (ya que soy un adicto a Vim).
DrScheme tiene las teclas para paréntesis y llaves cuadradas activadas por defecto. También tiene una función en la que mágicamente adivina a cuál de los dos te refieres, por lo que rara vez alcanzas shift-9.
Quack tiene una característica similar a la de DrScheme.
DivaScheme (mi editor) es algo completamente diferente. Edita en el nivel de sexp, por lo que los parens ya no están en el camino.
Vuelva a enlazar el bloqueo de bloqueo a "(" y haga que el editor se inserte automáticamente ")" para usted.
(Esto también ayuda a otros lenguajes con muchos corchetes, por ejemplo HTML ...)
Principalmente, simplemente los escribo, pero de vez en cuando, uso M- (y M-) (especialmente cuando estoy agregando un enlace LET "tarde en el escenario"), para encerrar el nnumber relevante de expresiones.
Saco mis dedos de las teclas de inicio ...
Yo recomendaría personalmente el combo letal de Emacs , SLIME y paredit.el Paredit le permite editar pseudo-semánticamente el código LISP a nivel de sexp, y eso hace que los paréntesis desaparezcan casi por completo. Puede moverse sexps como si fueran palabras simples e incluso mutarlas con solo un par de teclas. También hay un modo menor llamado Redshank que funciona en conjunto con Paredit y que proporciona más poder.
Considere estos ejemplos simples (| es la posición del cursor):
(foo bar (baz| quux) zot) + C-( => (foo (bar baz| quux) zot)
(foo (bar |baz) quux zot) + C-) => (foo (bar |baz quux) zot)
(foo (bar baz |quux) zot) + C-{ => (foo bar (baz |quux) zot)
(foo (bar |baz quux) zot) + C-} => (foo (bar |baz) quux zot)
He hecho una programación seria de Common Lisp en mi tiempo, y el crédito ha demostrado ser invaluable para mí. Ni siquiera puedo pensar en escribir un código LISP no trivial sin mi caja de herramientas. Y después de todo, así es como debería ser; nunca deberías tener que contar o unir tus paréntesis ... una vez que domines Paredit, los paréntesis desaparecerán frente a tus ojos.
Volver a asignar el [] a () ayudará, pero dejará de preocuparse mucho después de comenzar a usar Paredit.
Siéntase libre de usar las porciones específicas de LISP de mis dot-emacs .
Uso Vim con vim-sexp y vim-sexp-mappings-for-regular-people y luego he mapeado <leader>u
para ponerme en modo normal dentro de un nuevo (
.
map <leader>ui(