plugin - Refactorización en Vim
vim plugins (12)
Por supuesto, el hecho de que pueda refactorizar los IDEs no tiene precio para muchos, casi nunca lo hago cuando estoy codificando, pero puedo tratar de hacerlo cuando edito la fuente de otra persona. ¿Cómo se logra una tarea tan trivial en múltiples archivos en Vim?
Encontré este complemento para refactorizar a Ruby, pero ¿qué tal "cualquier" idioma?
C-familia
Pruebe el complemento Clighter para cambiar el nombre de refactorización para la familia c. Se basa en clang, pero existen limitaciones y el complemento está marcado como obsoleto.
El mapeo sugerido por Clighter es
nmap <silent> <Leader>r :call clighter#Rename()<CR>
Tenga en cuenta que el plugin sucesor clighter8 ha eliminado la funcionalidad de cambio de nombre en la confirmación 24927db42 .
Si usa neovim, puede echar un vistazo a la clamp complemento. Sugiere
nmap <silent> <Leader>r :call ClampRename()<CR>
Plugin Factorus
Hay otro complemento de vim dedicado a la refactorización llamado factorus que está disponible en github .
Actualmente (2017-12), es compatible con los idiomas
- do,
- Java, y
- pitón.
Language Server Protocol (LSP)
El servidor de lenguaje dedicado también permite el cambio de nombre. P.ej
- Clangd
- CQuery
- pyls (python)
- javascript-typescript-langserver
- ¡y muchos más!
Un editor de vim es necesario. Actualmente existen las siguientes opciones:
https://github.com/autozimu/LanguageClient-neovim que sugiere seguir el mapeo para renombrar:
nnoremap <silent> <F2> :call LanguageClient_textDocument_rename()<CR>
https://github.com/prabirshrestha/vim-lsp que proporciona el siguiente comando
:LspRename
https://github.com/natebosch/vim-lsc No pude encontrar soporte para el cambio de nombre, pero espero que esto se agregue.
Complemento YouCompleteMe (YCM) (15k estrellas en github)
:h RefactorRename-new-name
El
RefactorRename <new name>
En los tipos de archivos admitidos, este comando intenta realizar un cambio de nombre semántico del identificador bajo el cursor. Esto incluye renombrar declaraciones, definiciones y usos del identificador, o cualquier otra acción apropiada para el lenguaje. El comportamiento específico está definido por el motor semántico en uso.
Similar a | FixIt |, este comando aplica modificaciones automáticas a sus archivos de origen. Las operaciones de cambio de nombre pueden implicar cambios en varios archivos, que pueden estar abiertos o no en los búfers de Vim en ese momento. YouCompleteMe maneja todo esto por ti. El comportamiento se describe en la siguiente sección.
Compatible con tipos de archivos: ''javascript'' (solo variables), ''mecanografiado''
Por defecto no hay mapeo. Pero, por supuesto, puede definir uno si lo desea.
Consideraría usar la versión de emacs de Spacemacs. Utiliza los mismos modos y la mayoría de las teclas como Vim, pero tiene muchos más complementos debido a su naturaleza lisp. Si desea programar en C ++, simplemente agregue la capa de C ++ y la mayoría del IDE ya está configurado para usted. Para otros lenguajes interpretados como python o bash, no necesita dejar espaciales para usarlos. Incluso tienen una manera de ejecutar bloques de código directamente dentro de su texto que funciona de maravilla para la programación alfabetizada o la programación reproducible donde el código y los datos están en el mismo archivo. Ambos hechos como texto.
Spacemacs es mucho más pesado en su carga inicial, pero las cosas adicionales que puede hacer con él vale la pena los pocos segundos de costo de inicio. Una capa de org-mode vale la pena echarle un vistazo. Es el mejor bosquejo, programador, cronómetro / lista de tareas pendientes que he usado alguna vez.
Escribí este complemento para la refactorización genérica. Todavía requiere muchas mejoras. En algún momento en el futuro intentaré abandonar ctags a favor de clang para refactorizaciones de C & C ++.
Escribo mucho código C / C ++ en vim. La refactorización más común que hago es cambiar el nombre de variables, nombres de clase, etc. Usualmente uso :bufdo :%s/source/dest/g
para hacer una búsqueda / reemplazo en archivos, que es casi lo mismo que cambiar el nombre proporcionado por grande IDE''s
Sin embargo, en mi caso, descubrí que suelo renombrar entidades similares, deletreadas en diferentes casos (es decir, CamelCase, snake_case, etc.), así que decidí escribir una pequeña utilidad para ayudar con este tipo de búsqueda de "casos inteligentes" / reemplazar, está alojado here . Es una utilidad de línea de comandos, no un complemento para vim, espero que pueda encontrarla útil.
Estoy de acuerdo con el paradigma ''Vim no es un IDE''. Pero hay veces cuando no hay un IDE. Esto es lo que uso en esas situaciones:
: grep,: vimgrep,: Ag,: Ggrep
Refactorización que tiene más que ver con los reemplazos regulares que suelo usar :grep en el árbol de proyectos y luego grabar una macro para hacer el refactor -: g y: s no son brainers. Por lo general, me permitirá modificar rápidamente una gran cantidad de archivos con muy poco esfuerzo. Honestamente, uso este método más que cualquier otro.
Dependiendo de su flujo de trabajo, los comandos incorporados pueden ser lentos / inconvenientes. Si usas git, entonces :Ggrep
usar el excelente plugin de Fugitive y su comando :Ggrep
para buscar solo los archivos registrados en git. También me gusta el Silver Searcher por su rapidez.
: argdo,: cdo, y: bufdo
:cdo y :argdo son útiles para ejecutar comandos vim sobre un conjunto de archivos.
línea de comando
Cuando es más difícil determinar la lista de archivos que necesitan cambios a través de :vimgrep
, :vimgrep
a los comandos grep / find de la línea de comando para seleccionar más detenidamente la lista de archivos que necesito para refactorizar. Guarde la lista en un archivo de texto y use :e
una combinación de grabaciones de macros para realizar los cambios que necesito realizar.
Encuentro que cuanto menos oxidado guardo mis habilidades de grabación macro, más útil me resulta Vim para la refactorización: me siento cómodo al guardar / restaurar registros, aumentar / disminuir las variables del contador de registros, limpiar / guardar grabaciones macro en un archivo para usarlo más tarde, etc.
Actualizar
Desde que escribí este videocasts más para los métodos que describo han sido publicados en vimcasts.org (¡los animo a mirar TODOS los videos de Vimcast! ). Para refactorizar mira estos:
- Cambio con: Subvertir
- Proyecto de amplia búsqueda / reemplazo
- Buscar archivos múltiples con: vimgrep
- Uso: argdo para cambiar varios archivos
Vimgolf es también una excelente forma de practicar.
Para refactorizar, si está usando Unite (y debería), puede usar vim-qfreplace y hacerlo extremadamente fácil. Mira este video que demuestra cómo funciona. Una vez que se establece su flujo de trabajo, puede hacer algunas asignaciones para optimizarlo (en lugar de escribir la mayoría de las cosas como en el video).
Tal vez no sea la solución más elegante, pero me pareció muy útil: uso ECLIM para conectar VIM y Eclipse. Por supuesto, toda la edición de mi código fuente se hace en VIM, pero cuando llega el momento de refactorizar, uno puede aprovechar las capacidades superiores de Eclipse en este asunto.
Darle una oportunidad.
Una combinación de dos complementos: vim-ripgrep , para buscar entre los archivos y poner los resultados en la ventana de revisión, y quickfix-reflector para guardar los cambios directamente en la ventana de revisión y hacer que guarde automáticamente cada cambio en los archivos.