2009-04-07 14 views
21

En Emacs, ¿cómo puedo aplicar una longitud de línea máxima de, digamos, 80 caracteres? Quiero que inserte saltos de línea adecuados en mi código, al igual que fill-paragraph para texto, si es posible, con la inserción correcta de la segunda parte de la línea.¿Cómo imponer la longitud máxima de línea en Emacs?

Aquí un pequeño ejemplo:

LongNameType<PrettyLong, AlsoLong> doSomethingWithLongFunctionName(int a, int b); 
foo(); 

Si hago realmente fill-paragraph se convierte en:

LongNameType<PrettyLong, AlsoLong> 
doSomethingWithLongFunctionName(int a, int b); foo(); 

mientras que yo prefiero esto:

LongNameType<PrettyLong, AlsoLong> 
    doSomethingWithLongFunctionName(int a, int b); 
foo(); 
+0

¡Excelente idea! +1, siempre trato de mantener 100 caracteres/línea en VS para que pueda ver mi código de manera consistente con el mismo tamaño de ventana. Las herramientas para automatizar esto serían geniales. – AaronLS

Respuesta

0
No

realmente una emacser, ¿pero qué sucede si enciendes auto-fill-mode mientras estás en c++-mode?

modo C++ debe darle auto-guión, y auto-fill-mode le da al ajuste de líneas ....

+0

El ejemplo que di ya estaba en modo C++ ... – Frank

1

utilizo modeline-posn paquete. Destaca el número de columna en la línea de modo si es mayor que el valor especificado.

5

fill-paragraph y auto-fill-mode deliberadamente no ajustan el código. Hay demasiadas formas de hacerlo y probablemente se equivocará. Van a envolver los comentarios, pero eso no te ayuda aquí.

La única forma en que alguna vez lo he hecho para poner explícitamente el lugar donde quiero que se rompa el texto. Luego, el sangrado automático debe poner la línea discontinua en el lugar correcto.

¿Está tratando de refluir un gran cuerpo de código existente? ¿O tratando de completar el trabajo de autocompletar en el código que está escribiendo ahora?

+0

Pero esperaría que el modo C++ redefina el párrafo de relleno para que realmente haga lo correcto para C++. Eso no es más difícil que el resto de la implementación en modo C++. Sí, idealmente me gustaría cambiar mi código completo. Pero también, lo quiero para el nuevo código que estoy escribiendo en Emacs. – Frank

+0

Creo que es más difícil, porque hay muchas más formas de romper una línea que sangrar. Muchas veces romper la marca de 80 columnas (o donde sea) no es la mejor opción para diseñar el código (¿se rompe después de cada argumento, por ejemplo, en una larga lista de argumentos). –

+0

Creo que acaba de romper después de la última coma antes del límite. Puede haber algunas excepciones a esto, pero esa debería ser la regla principal. – Frank

5

Hay un number of packages que le advierte de los límites de longitud de línea. Personalmente, uso wide-column, que cambia el color del cursor dependiendo de su columna actual.

+0

No respondió la pregunta.Pls proporciona una solución explicita para hacer cumplir la inserción de nueva línea (rompiendo la línea) cuando alcanza x, de lo contrario no confundas a las personas. – iantonuk

+0

@bedbad Nadie "respondió la pregunta", porque (al parecer) la solución todavía no existe en Emacs. Sin embargo, cada respuesta intentó darle a Frank algo que podría funcionar para ayudarlo. Agregue comentarios constructivos: somos una comunidad que crea personas, en lugar de derribarlas. Dudo que alguien estuviera "confundido" por mi respuesta (o las otras respuestas) porque nadie proporcionó una respuesta que engañó a la gente. –

+0

No creo que tu respuesta tenga algo que ver con una pregunta. Se supone que debes responder a una pregunta, no a algo "que pueda funcionar para alguna persona" en la pregunta SO, porque existe para muchos que buscan la respuesta. Incluso si ayuda 1, confunde a un montón de gente – iantonuk

1

Debe echar un vistazo a una de las muchas bibliotecas de "línea vertical" para Emacs. Algunos mantienen una línea de resaltado vertical sobre todo el búfer en el punto en todo momento (no es lo que realmente quieres) pero otras bibliotecas colocan el resaltado vertical en una columna de corrección en todo momento, que no es realmente lo que quieres, pero puedes ver inmediatamente cuando deberías estar envolviendo líneas.

0

Trate

'(c-max-one-liner-length 80) 

'(fill-column 80) 
'(c-ignore-auto-fill (quote (string cpp))) 

espero que ayude.

Cuestiones relacionadas