Refactoring C / C ++ en Vim (por ejemplo extracción método como en Eclipse)
-
20-09-2019 - |
Pregunta
¿Hay algún complemento o métodos incorporados en Vim para realizar la refactorización de código C o C ++, algo así como las herramientas de refactorización en Eclipse?
Estoy especialmente interesado en la herramienta de método extracto refactorización de Eclipse que va a determinar parámetros de nuevos métodos y típicamente también adivinar una variable para su uso como el valor de retorno.
Solución
No, aunque Vim es un buen ambiente para la edición, y se puede personalizar de muchas maneras (plegado de código, coloreado de sintaxis, macros de expansión etc.) la mayoría de estos se realizan en el nivel de sintaxis, más que el nivel semántico . Incluso el plegado de código simplemente coincide apoyos opuestos.
Para hacer una refactorización adecuada, usted tiene que tener una gran cantidad de conocimiento semántico de la AST, qué variables se declaran en el que el alcance, y así sucesivamente. IDEs como Eclipse acumulan una caché de las variables definidas en cada ámbito léxico, de modo que puedan referirse rápidamente de vuelta a donde son utilizados en términos de determinar qué cambiar el nombre y dónde.
Eso no quiere decir que usted no puede hacer algunas cosas sintácticamente; después de todo, uno puede simplemente sacar un bloque de código y ponerlo en una función separada con bastante facilidad. Usted podría incluso ser capaz de adivinar en algunos parámetros (por ejemplo, encontrar una lista de las variables, averiguar cuáles tienen declaraciones locales, eliminarlos y lo que queda son sus parámetros. Pero Eclipse también hace otras cosas-como averiguando si las variables son modificados en la función, y la garantía de que están pasada hacia atrás por el valor de retorno. también comprueba para cualquier excepción lanzada, y añadirlos a la lista.
El efecto neto es que, aunque es posible que pueda aproximar algunos de estos en Vim, que realmente no vas a ser capaz de conseguir este trabajo en un AMBIENTE Vim-solamente. Se podría utilizar una combinación de teclas Vim-como en Eclipse adecuada, o buscar en eclim . Desde la página principal:
El objetivo principal de eclim es llevar Eclipse funcionalidad al Vim editor. El objetivo inicial era proporcionar funcionalidad Java de Eclipse en vim, pero el soporte para varios otros lenguajes (C / C ++, PHP, Python, Ruby, CSS, HTML, XML, etc.) se han añadido y varios más se han previsto.
Eclim es menos de una aplicación y más de una integración de dos grandes proyectos. La primera, Vim, es sin duda uno de los mejores editores de texto en existencia. El segundo, Eclipse, proporciona muchas herramientas para el desarrollo en varios idiomas. Cada proporciona muchas características que pueden aumentar la productividad de los desarrolladores, pero ambos todavía dejan mucho que deseado. Vim carece de soporte nativo Java y muchas de las características avanzadas disponible en Eclipse. Eclipse, en el Por otro lado, todavía requiere el uso de el ratón para muchas cosas, y cuando en comparación con Vim, proporciona una menos de interfaz ideal para la edición de texto.
Aquí es donde entra en juego eclim. En lugar de tratar de escribir en un IDE Vim o un editor Vim en Eclipse, eclim proporciona plug-in que un Eclipse expone características de Eclipse a través de una interfaz de servidor, y un conjunto de Vim plug-ins que se comunican con Eclipse sobre dicha interfaz.
Esto no sólo da un entorno Eclipse-como, es es Eclipse. Pero sigue recibiendo las funciones de navegación y de edición de texto de vim. Suena como este podrían satisfacer sus necesidades, aunque la documentación sobre refactorización apoyo no indica que proporciona una funcionalidad método extracto.
Otros consejos
He escrito un refactorización complemento . C ++ es uno de los principales idiomas que se manejan (ya que es mi idioma principal en el trabajo). se admite Método de extracción.
En C ++, el plugin es capaz (gracias a ctags) para deducir la mayoría (pero por desgracia no siempre todo - gracias a ctags ...) de las variables que entran y salen de la función extraído. Todavía tengo que escribir un pequeño cuadro de diálogo para seleccionar cómo se intercambian los de las variables de entrada / salida (ref const, ref rvalue, copiar, puntero, tuplas, estructura, etc.) (Por cierto, ayuda es bienvenida como interfaces gráficas de usuario no son lo mío ^^ ') .
Después de buscar alta y baja para vim con refactorización para C ++, esta es la mejor solución que he llegado con.
- Visual Studio 2013 y superior - Gran IDE para C ++ desarrollo y depuración, pero no tiene suficiente refactorización o vim
- Instalar el plugin vsvim - Ahora, usted tiene toda la navegación vim, búsqueda, sustitución de cadenas, etc. (Algunas de las características avanzadas que no son compatibles)
- Instalar Resharp C ++ - Excelente para la refactorización a costa de la velocidad. Esto hace que sea un poco torpe, pero si quieres inferir de auto generar métodos / variables, cambiar el nombre de las variables locales / globales / método o funciones, la búsqueda de usos en la solución, y más características, hace que sea muy vale la pena.
Esta es la mejor combinación que encontré para C ++ desarrollo, depuración y refactorización. Me hace al menos 3x - 5 veces más rápido. Espero que le ayuda también.