Funcionalidade semelhante a Grep para o Notepad ++?

52

Gostaria de ter alguma funcionalidade semelhante a grep no Notepad ++.

Na versão mais simples, eu gostaria de poder copiar todas as linhas do buffer atual que contém a palavra foopara um novo buffer. Posso usar o plug-in TextFX para ocultar todas as linhas sem foo, mas isso não faz tudo o que eu quero (está perdido Alt- Tabnão posso copiar apenas as linhas correspondentes etc.).

Frank Meulenaar
fonte

Respostas:

79

Ctrl+ F-> vá para a guia Marca -> alterne a linha do marcador -> Clique em Marcar tudo .

Selecione o menu Pesquisar -> Favorito -> Copiar linhas marcadas .

kev
fonte
5
Bom obrigado. Você pode "cortar linhas marcadas" também para um homem pobre grep -v.
ARRG 15/07
2
Nas versões posteriores, por exemplo, 5.4.5, não há nenhuma guia "Marcar". Em vez disso, há uma caixa de seleção, "Marcar linha", na guia "Localizar". E "Copiar linhas marcadas" está diretamente no menu "Pesquisar".
Peter Mortensen
@ARRG Não é possível encontrar as linhas marcadas cortadas ou Copiar linhas marcadas na versão atual, onde está?
Nicolas Thery 02/02
Trabalhando como charme :-)
Sundararaj Govindasamy
12

Eu estava apenas olhando para a mesma pergunta. Não tenho certeza se você está ciente; na caixa de diálogo Localizar, você pode encontrar tudo no documento atual, que abrirá uma janela na parte inferior, mostrando as linhas correspondentes. Em seguida, você pode copiar isso para um novo documento.

Infelizmente, ele inclui algumas informações estranhas nos resultados (número da linha etc.), mas você pode filtrá-las usando o modo de coluna.

Nick S
fonte
1
Os números de linha adicionados pode até ser uma característica :)
Frank Meulenaar
2
Você pode achar este plugin útil code.google.com/p/searchplus
Amarghosh
@Amarghosh plugin agradável, mas falta um pouco de ergonomia (por que botões e sem atalhos de teclado?). Prendedor agradável :)
Benj
O @Benji Alt-Q iniciará o plugin. Mesmo que não haja teclas de atalho na janela do plug-in, a navegação básica por guias foi ativada. Se houver interesse suficiente no plug-in, tentarei adicionar mais recursos à medida que for obtendo algum tempo. Obrigado pelo feedback :)
Amarghosh
2

Outra ótima solução é usar o plug-in NppExec para adicionar um comando grep para o Notepad ++.

A principal vantagem sobre a solução "Favoritos" é que ela roda muito mais rapidamente, especialmente para arquivos grandes, e você não precisa modificar o arquivo original. Observe que você precisa criar um pequeno script uma vez para disponibilizar esse recurso no seu Notepad ++.

Meu exemplo de solução é para Windows e eu uso o findstr , que é uma ferramenta de comando semelhante a grep disponível em todas as máquinas Windows. Mas é claro que você também pode usar qualquer outro clone grep de sua escolha.

Etapa 1: instalar o plugin NppExec

Vá para Plugins / Plugin Manager / Show Plugin Manager, role para baixo até NppExec, selecione este plug-in e clique em Instalar. Pode ser necessário reiniciar o seu Notepad ++ para concluir o processo de instalação.

Etapa 2: Crie um pequeno script para NppExec

Vá para Plugins / NppExec / Execute, digite o seguinte script e salve-o como "grep":

SET local OUTFILE = "c:\temp\$(FILE_NAME).temp"
INPUTBOX "Input filter string"
cmd /c findstr $(INPUT) "$(FULL_CURRENT_PATH)" >$(OUTFILE)
NPP_OPEN $(OUTFILE)

(verifique se o caminho para o OUTFILE funciona no seu ambiente)

Etapa 3: adicionar um item de menu ao seu script (opcional)

Vá para Plugins / NppExec / Advanced Options, escolha o script "grep" abaixo Associated scripte clique em OK para salvar. Reinicie o bloco de notas conforme solicitado pelo NppExec para concluir a adição do novo item de menu.

Etapa 4: adicione um atalho para o seu script (opcional)

Vá para Settings / Shortcut Mapper / Plugin commands, role para baixo para encontrar o seu comando de script "grep" e defina um atalho para ele. por exemploALT-G

Erik Kalkoken
fonte
Primeiro de tudo, obrigado por uma ótima resposta que está aguardando anos para ser votada ...: -) Eu pensei que estava tendo alguns problemas com o script, não funcionou. Então notei que deveríamos adaptar os caminhos etc., mas você não mencionou explicitamente, então apenas copiei e colei cegamente! Eu trabalho tão rápido que me atrasa: -)
pgr 01/02
muito obrigado pelo feedback. Vou acrescentar isso à minha resposta.
Erik Kalkoken
Outra pequena nota: $(FULL_CURRENT_PATH)não retornará nenhum caminho se o arquivo ainda não estiver salvo. Você pode esperar que ele resida em algum lugar (diretório temporário?), Mas não realmente. Essa situação de arquivo não salvo pode ser bastante comum, basta colar algo de um log para cumprimentá-lo ... podemos aperfeiçoar esse script para salvar o arquivo se ainda não estiver salvo - mas, por simplicidade, lembrarei-me de salvar manualmente antes de grepping. Obrigado.
pgr
Isso funciona se a string de pesquisa contiver espaço (s)? ou outros caracteres especiais?
G-Man diz 'Reinstate Monica'
Sim, isso funciona
Erik Kalkoken
-1

Etapa 5: criar script para salvar rapidamente e documento grep

Vá para Plugins / NppExec / Execute, digite o seguinte script e salve-o como "grep":

SET local AUTOSAVEFILE = "% tmp% \ NpPPautosave.tmp"
SET local OUTFILE = "% tmp% \ NpPPautosaveToGrep.temp"
NPP_SAVEAS "% tmp% \ NpPPfile.tmp"
INPUTBOX "String de entrada para GREP"
cmd / c findstr $ (INPUT ) $ (AUTOSAVEFILE)> $ (OUTFILE)
NPP_OPEN $ (OUTFILE)

Kasumiru
fonte
Onde estão os passos 1, 2, 3 e 4?
precisa saber é o seguinte
(1) Preferimos, na medida do possível, que as respostas sejam independentes. Parece que há (pelo menos) uma etapa a ser executada antes que alguém possa usar sua resposta (dica: Etapa 1); inclua-o na sua resposta. (2) Parece muito forte que sua resposta está nos ombros da resposta de Erik Kalkoken . Se você vai fazer isso, você deve dizê-lo explicitamente. ... (continua)
G-Man diz 'Reinstate Monica'
(Continua)… (3) Sua resposta é melhor que a de Erik? Se sim, explique como e por quê. (De fato, seria bom se você explicasse o que a resposta faz e como usá-la.) Se não, por que a postou? (4) Você acredita que é de alguma forma superior usar um nome de arquivo de saída codificado em vez de um que seja baseado no nome de arquivo atual? (5) Existe alguma vantagem em executar findstrno arquivo de salvamento automático em vez do arquivo atual? (6) Por que sua resposta usa ambos C:\temp e C:\tmp? …… Por favor, não responda nos comentários; edite sua resposta para torná-la mais clara e completa.
G-Man diz 'Reinstate Monica'
(1) "um passo que deve ser feito antes de alguém" - todos os Erik saltam de 1 a 4. (2) Você deve ter 50 reputação para comentar. (comentar Erik post) (3) Sim, minha resposta é pequena melhor, porque a resposta Erik não funciona antes que o documento seja salvo no disco rígido. Não quero salvar o arquivo temporário apenas para o grep. "o que a resposta faz e como usá-la" - meu código salva apenas o texto aberto no bloco de notas ++ em arquivo temporário no disco rígido. Esta é a linha "NPP_SAVEAS", apenas salva automaticamente o texto no disco rígido. (4) Não! exatamente não. (5) sim! O núcleo do Erik não funciona; antes de salvar no disco rígido, observe minha (3) resposta.
Kasumiru
(6) Sory, eu estava com pressa e erro, minhas janelas cygwin têm tmp e temp dirs. "Por favor, não responda nos comentários" - histórico, mas eu escrevi minha resposta antes de ler este comentário
Kasumiru