ClangFormat es una de las mejores herramientas para formatear automáticamente los códigos fuente en C, C ++, Java, JavaScript, Objective-C, C #. Hay complementos para entornos de desarrollo populares (IDE), pero a menudo necesita formatear rápidamente un archivo o parte de un archivo fuente sin ejecutar un IDE engorroso, experimentar con opciones de formato y diferentes versiones de ClangFormat con la capacidad de deshacer cambios rápidamente. Usar la versión de consola de ClangFormat para este propósito es inconveniente. Una posible solución es llamar a ClangFormat desde un editor de texto. El
sitio web oficial describe los métodos de integración con Vim, Emacs y algunos otros, pero no hay información sobre la integración con Notepad ++. La siguiente es una instrucción simple para Notepad ++ (para Windows).
Requisitos iniciales
- formatear un archivo abierto en Notepad ++ con ClangFormat;
- formatear el fragmento seleccionado en el archivo;
- descartar cambios;
- cambio de formato de estilo (conjunto de reglas);
- Cambiar a otra versión de ClangFormat
- use herramientas estándar siempre que sea posible, sin reconstruir ClangFormat y sin escribir un nuevo complemento para Notepad ++.
Instalación y configuración
1. Si Notepad ++ aún no está instalado, descárguelo e instálelo
https://notepad-plus-plus.org2. En Notepad ++ instale el complemento NppExec
NppExec le permite llamar a aplicaciones de terceros desde Notepad ++ e interactuar con los componentes de la biblioteca Scintilla, en función de los cuales se escribe Notepad ++.
Plugins –> Plugin Admin... –> NppExec –> Install
Notepad ++ se reiniciará, después de lo cual
<Notepad++>/plugins/NppExec/
y el elemento de menú
Plugins –> NppExec
3. Descargue el ejecutable ClangFormat
Para hacer esto, en la página
https://llvm.org/builds/ encontramos y descargamos el archivo de instalación para Windows, por ejemplo
LLVM-XXX-rYYYYYY-win64.exe
. No puede instalar el paquete completo, simplemente extraiga el archivo
clang-format.exe
por
clang-format.exe
. Puede usar 7-zip: elimine la extensión
.exe
del
.exe
, abra el archivo con 7-zip y extraiga
clang-format.exe
del
bin/
subdirectorio. Ponemos
clang-format.exe
en el
clang-format.exe
<Notepad++>/plugins/NppExec/clang-format/
.
4. Agregar archivos de configuración para ClangFormat
Los archivos de configuración deben llamarse
.clang-format
o
_clang-format
. Contienen un conjunto de reglas de formato (estilos), cuyo formato se describe en la guía
Opciones de estilo de ClangFormat .
Por ejemplo, usamos archivos de los proyectos
Linux Kernel y
Qt .
Los
.clang-format
descargados de GitHub se colocan en los directorios apropiados:
<Notepad++>/plugins/NppExec/clang-format/LINUX_KERNEL/
<Notepad++>/plugins/NppExec/clang-format/QT/
5. Crear un script para NppExec
Abra la ventana para editar y ejecutar scripts NppExec
Plugins –> NppExec –> Execute...
o presione
F6
. Copie y pegue el texto del script a continuación en la ventana y guarde el script llamado
clang-format
con el botón
Save...
Script NppExec // Hide console NPP_CONSOLE 0 //------------------------------------------------------------------------------ // Uncomment a line to select a style //set style = LINUX_KERNEL set style = QT //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ set clangformatexe = $(CWD)\plugins\NppExec\clang-format\clang-format.exe set clangformatcfgdir = $(CWD)\plugins\NppExec\clang-format set tmpdir = $(SYS.TEMP) set clangformatcfgfile = $(clangformatcfgdir)\$(style)\.clang-format set srcfiletmp = $(tmpdir)\~src.tmp //------------------------------------------------------------------------------ cmd.exe /c if exist "$(clangformatexe)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(clangformatexe)" not found exit endif cmd.exe /c if exist "$(clangformatcfgfile)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(clangformatcfgfile)" not found exit endif // Copy $(clangformatcfgfile) to $(tmpdir)\.clang-format if their temestamps are different cmd.exe /v /c " for %i in ("$(clangformatcfgfile)") do set date1="%~ti" && for %i in ("$(tmpdir)\.clang-format") do set date2="%~ti" && if not "!date1!"=="!date2!" ( echo !date1! != !date2! && echo COPYING $(clangformatcfgfile) to $(tmpdir)\ && copy "$(clangformatcfgfile)" "$(tmpdir)\" /Y )" if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR copying "$(clangformatcfgfile)" to "$(tmpdir)" exit endif // Get selected text length sci_sendmsg SCI_GETSELTEXT // If nothing is selected - select the current line if $(MSG_RESULT) == 1 then sci_sendmsg SCI_VCHOMEWRAP sci_sendmsg SCI_LINEENDWRAPEXTEND endif // Save selected text to $(srcfiletmp) sel_saveto "$(srcfiletmp)" :a cmd.exe /c if exist "$(srcfiletmp)" (exit 0) else (exit 1) if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR: "$(srcfiletmp)" not found exit endif // Run ClangFormat $(clangformatexe) -i -style=file "$(srcfiletmp)" if $(EXITCODE) != 0 then NPP_CONSOLE 1 echo ERROR running "$(clangformatexe)" exit endif // Replace selected text with $(srcfiletmp) sel_loadfrom "$(srcfiletmp)" // Delete $(srcfiletmp) file cmd.exe /c del "$(srcfiletmp)"
Después de iniciar el script, en función del estilo de formato seleccionado especificado en la variable de
style
, selecciona el archivo de
.clang-format
deseado, verifica la fecha de su cambio y, si es necesario, lo copia en un directorio temporal. Allí, el fragmento seleccionado del código fuente se copia en el archivo temporal, después de lo cual se
clang-format.exe
. El fragmento formateado se copia de nuevo a la ventana Notepad ++. Luego se elimina el archivo temporal.
En ClangFormat no hay forma de especificar la ruta al archivo de configuración de
.clang-format
. ClangFormat lo buscará en el directorio del archivo formateado y, si no lo encuentra, irá a buscar en los directorios principales. Una vez que el script
.clang-format
permanecerá en el directorio temporal para no copiarlo cada vez que se inicia el formateo.
En todas las etapas de la secuencia de comandos, se verifican los errores y, cuando se producen, se abre la ventana de la consola NppExec, en la que se muestra un mensaje.
6. En Notepad ++, agregue un nuevo elemento de menú para ejecutar el script
Abra
Plugins –> NppExec –> Advanced Options...
, en la lista desplegable de
Associated script
, seleccione el nombre del script en
clang-format
y haga clic en el botón
Add/Modify
.
Reiniciamos Notepad ++, después de lo cual aparecerá el elemento de menú
Plugins –> NppExec –> clang-format
.

7. En Notepad ++, configure el método abreviado de teclado para ejecutar el script
Usaremos la combinación
Ctrl + I
por analogía con QtCreator. Abra
Settings –> Shortcut Mapper
.
De manera predeterminada, la combinación
Ctrl + I
ocupada, por lo que debe liberarla con el botón
Clear
en la pestaña
Main Menu
(línea 38
Split Lines
en la versión actual de Notepad ++). Después de eso, en la pestaña
Plugin commands
del
Plugin commands
, asigne la combinación
Ctrl + I
a la secuencia de comandos de
clang-format
.
¡Listo, podemos usarlo!
Instrucciones de uso
Abra el archivo fuente en Notepad ++, seleccione el fragmento deseado o todo el texto y presione
Ctrl + I
Si no se selecciona nada, se formateará la línea actual.

Para deshacer cambios, use las herramientas de edición estándar (
Ctrl + Z
).
Para cambiar las reglas de formato, edite los archivos de configuración de
.clang-format
el
.clang-format
<Notepad++>/plugins/NppExec/clang-format/
Si necesita usar otra versión de ClangFormat, cambie la ruta al archivo ejecutable en el script
set clangformat = "\path\to\clang-format.exe"
Para seleccionar un estilo de formato diferente, presione
F6
y en el texto de la secuencia de comandos de
clang-format
seleccione el estilo deseado descomentando una de las líneas
set style = STYLE_NAME
.
Todos los archivos necesarios están en el
archivo .
Buen formato!