Quero poder pesquisar apenas nas DiffText
regiões de um arquivo que estou editando.
Pergunta relacionada: /programming/2683521/vim-search-in-cc-code-lines
A resposta aceita aqui parece funcionar muito bem para, digamos, Comment
ou Type
grupos de sintaxe, mas qualquer um dos grupos Diff não funciona. Suponho que tenha algo a ver com os grupos diff sendo aninhados dentro de outros grupos.
Meu cenário específico é que removi várias guias e espaços à direita de vários arquivos. Eu diferenciei os arquivos dos originais e quero garantir que nada, exceto as guias e os espaços finais, sejam diferentes.
PS: Não quero fazer uma substituição global de todas as guias, porque meu antecessor usou recuo inconsistente e preciso verificar manualmente tudo isso.
syntax-highlighting
search
Tumbler41
fonte
fonte
:set diffopt+=iwhite
, ou eu entendi errado?Respostas:
Não nativamente (também escrevi um patch, que permitiria adicionar uma expressão de pular à função search (), mas isso ainda não foi incluído).
Mas você pode contornar isso escrevendo sua própria função que verifica se a correspondência está em uma região diff contida. Algo assim (abordagem muito básica):
Erro ao verificar e lidar com mais casos extremos (abortar depois que a pesquisa foi concluída, por exemplo.) Deixado como exercício para o usuário.
fonte
if... != 0
Assim, ela interrompe a pesquisa quando cai em um diff. Isso é o que parecia funcionar para mim, pelo menos. (Eu sei que sua função não se destinava a ser completa, mas eu tenho certeza que isso é para trás.)Bem, a maneira mais simples de pesquisar as diferenças (todas as linhas diferentes, não apenas o DiffText, desculpe) seria rodar
diff
nos dois arquivos, colocar a saída em um buffer e pesquisar lá. Supondo que você esteja visualizando filea e fileb no vimdiff:Os números de linha estarão na saída, em linhas como
para que você possa pular facilmente para a linha (9) no arquivo original:
Ele procura uma linha com número de linha para trás, coloca o número da linha em @ ", fecha o buffer de pesquisa temporário e salta para o número da linha. Você provavelmente desejará massagear isso para levar em conta o layout da janela etc., e talvez mapeie-o para uma chave.
Você também pode incluir linhas de contexto no diff, para facilitar a leitura, mas verifique se suas pesquisas estão alinhadas com alterações, ou seja, aquelas que começam com um espaço em branco:
fonte
@@ -292,2 +283,7 @@
. Dito isto, não consigo entender para que0/
serve o seu padrão de pesquisa. Além dissoyW
, arrancará a PALAVRA, o que significa292,2
. Quando você executa:@"
Isso leva você para a linha 2, em vez de 292. Eu acho que eu viria com algo como isto:?@@.*+?e+1<CR>yw:q!<CR>:@"<CR>
. Você pode mudar o primeiro+
para-
dependendo do arquivo que deseja ver. Pensamentos?<CR>
para encerrar o padrão de pesquisa, eyW
deveria seryw
como você disse!+
ou-
no início da linha e os nomes dos arquivos no cabeçalho.