ClangFormat é uma das melhores ferramentas para formatar automaticamente códigos-fonte em C, C ++, Java, JavaScript, Objective-C, C #. Existem plugins para ambientes populares de desenvolvimento (IDEs), mas geralmente é necessário formatar rapidamente um arquivo ou parte de um arquivo de origem sem iniciar um IDE pesado, experimentar configurações de formatação e diferentes versões do ClangFormat com a capacidade de desfazer alterações rapidamente. Usar a versão do console do ClangFormat para essa finalidade é inconveniente. Uma solução possível é chamar ClangFormat a partir de um editor de texto. O
site oficial descreve como se integrar ao Vim, Emacs e alguns outros, mas não há informações sobre a integração com o Notepad ++. A seguir, é apresentada uma instrução simples para o Notepad ++ (para Windows).
Requisitos iniciais
- formatar um arquivo aberto no Notepad ++ com ClangFormat;
- formatar o fragmento selecionado no arquivo;
- descartar alterações;
- mudança de formatação de estilo (conjunto de regras);
- Mudando para outra versão do ClangFormat
- use ferramentas padrão sempre que possível, sem reconstruir o ClangFormat e sem escrever um novo plug-in para o Notepad ++.
Instalação e configuração
1. Se o Notepad ++ ainda não estiver instalado, faça o download e instale-o
https://notepad-plus-plus.org2. No Notepad ++, instale o plug-in NppExec
O NppExec permite chamar aplicativos de terceiros do Notepad ++ e interagir com os componentes da biblioteca Scintilla, com base nos quais o Notepad ++ está gravado.
Plugins –> Plugin Admin... –> NppExec –> Install
O Notepad ++ será reiniciado, após o qual o
<Notepad++>/plugins/NppExec/
e o item de menu
Plugins –> NppExec
serão
Plugins –> NppExec
3. Baixe o executável ClangFormat
Para fazer isso, na página
https://llvm.org/builds/ , encontramos e
LLVM-XXX-rYYYYYY-win64.exe
o arquivo de instalação do Windows, por exemplo,
LLVM-XXX-rYYYYYY-win64.exe
. Você não pode instalar o pacote inteiro, apenas extraia o arquivo
clang-format.exe
pelo
clang-format.exe
. Você pode usar o 7-zip: exclua a extensão
.exe
do
.exe
, abra-o com 7-zip e extraia o
clang-format.exe
do
bin/
subdiretório.
clang-format.exe
no
clang-format.exe
<Notepad++>/plugins/NppExec/clang-format/
.
4. Adicione arquivos de configuração para ClangFormat
Os arquivos de configuração devem ter o nome
.clang-format
_clang-format
ou
.clang-format
_clang-format
. Eles contêm um conjunto de regras de formatação (estilos), cujo formato é descrito no guia
Opções de estilo ClangFormat .
Por exemplo, usamos arquivos dos projetos
Linux Kernel e
Qt .
Os arquivos no
.clang-format
baixados do GitHub são colocados nos diretórios apropriados:
<Notepad++>/plugins/NppExec/clang-format/LINUX_KERNEL/
<Notepad++>/plugins/NppExec/clang-format/QT/
5. Crie um script para NppExec
Abra a janela para editar e executar scripts NppExec
Plugins –> NppExec –> Execute...
ou pressione
F6
. Copie e cole o texto do script abaixo na janela e salve o script chamado
clang-format
com o botão
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)"
Depois de iniciar o script, com base no estilo de formatação selecionado especificado na variável
style
, seleciona o arquivo no
.clang-format
desejado, verifica a data de sua alteração e, se necessário, copia-o para um diretório temporário. Lá, o fragmento selecionado do código-fonte é copiado para o arquivo temporário, após o qual o
clang-format.exe
. O fragmento formatado é copiado de volta para a janela do Notepad ++. Em seguida, o arquivo temporário é excluído.
No ClangFormat, não há como especificar o caminho para o arquivo de configuração no
.clang-format
. O ClangFormat irá procurá-lo no diretório do arquivo formatado e, se não o encontrar, irá procurar nos diretórios pai. Após a
.clang-format
do script
.clang-format
arquivo no
.clang-format
permanecerá no diretório temporário para não copiá-lo sempre que a formatação for iniciada.
Em todos os estágios do script, os erros são verificados e, quando ocorrem, a janela do console NppExec é aberta, na qual uma mensagem é exibida.
6. No Notepad ++, adicione um novo item de menu para executar o script
Abra
Plugins –> NppExec –> Advanced Options...
, na lista suspensa
Associated script
, selecione o nome do script no
clang-format
e clique no botão
Add/Modify
.
Reiniciaremos o Notepad ++, após o qual o item de menu
Plugins –> NppExec –> clang-format
será exibido.

7. No Notepad ++, configure o atalho do teclado para executar o script
Usaremos a combinação
Ctrl + I
por analogia com o QtCreator. Abra
Settings –> Shortcut Mapper
.
Por padrão, a combinação
Ctrl + I
ocupada, portanto, você deve liberá-la com o botão
Clear
na guia
Main Menu
(linha 38
Split Lines
na versão atual do Notepad ++). Depois disso, na guia
Plugin commands
do
Plugin commands
-
Plugin commands
, atribua a combinação
Ctrl + I
ao script no
clang-format
.
Feito, podemos usá-lo!
Instrução de uso
Abra o arquivo de origem no Notepad ++, selecione o fragmento desejado ou todo o texto e pressione
Ctrl + I
Se nada for selecionado, a linha atual será formatada.

Para desfazer alterações, use as ferramentas padrão do editor (
Ctrl + Z
).
Para alterar as regras de formatação, edite os arquivos de configuração no
.clang-format
no diretório
<Notepad++>/plugins/NppExec/clang-format/
Se você precisar usar outra versão do ClangFormat, altere o caminho para o arquivo executável no script
set clangformat = "\path\to\clang-format.exe"
Para selecionar um estilo de formatação diferente, pressione
F6
e, no texto do script de
clang-format
selecione o estilo desejado descomentando uma das linhas
set style = STYLE_NAME
.
Todos os arquivos necessários estão no
arquivo morto .
Boa formatação!