Ao pesquisar, como sempre garantir que algumas linhas após a palavra destacada sejam visíveis?

7

Ao executar search/isearchem um texto, às vezes seria desejável ver algumas linhas após a sequência pesquisada destacada, ou seja, outras palavras para evitar que a palavra destacada esteja na parte inferior da janela.

Por exemplo, se tivermos o texto a seguir em um buffer, tente pesquisar a última palavra que você consegue ver. Para mim, são os princípios da palavra (como maximizei o quadro). A palavra destacada (na minha situação, a palavra princípios ) está na parte inferior da tela. Gostaria de ver sempre poucas linhas (se possível) após a palavra princípios após a pesquisa.

Surrounded
occasional 
pianoforte 
alteration 
unaffected 
impossible 
Perceived 
knowledge 
certainly 
Although 
moreover 
mistaken 
kindness 
horrible 
distance 
marriage 
country 
demesne 
Bachelor 
domestic 
extended 
doubtful 
Greatly 
Improved 
provided 
Dwelling 
speedily 
ignorant 
steepest 
Admiration 
instrument 
affronting 
invitation 
reasonably 
ecstatic 
wondered 
disposal 
curiosity  
shameless 
explained.
sincerity 
extremity 
additions 
principles
Carriage 
Remainder 
household 
direction 
zealously 
Sufficient 
motionless
compliment 
stimulated 
assistance
Nome
fonte
Você pode escrever uma função que role algumas linhas após cada ocorrência e adicionar quando a tecla de ocorrência da pesquisa for chamada.
ReneFroger
@ReneFrogertjuh Normalmente, se a qualquer momento alguém cancela a consulta de pesquisa, deve retornar ao estado do buffer antes de realizar a pesquisa.
Name

Respostas:

5
(setq scroll-margin 3)

Funciona em qualquer lugar, não apenas durante isearch.

scroll-margin. Padrão: 0. Número de linhas de margem na parte superior e inferior de uma janela. Atualize a janela sempre que houver um ponto dentro de muitas linhas da parte superior ou inferior da janela.

Sozzikins
fonte
Obrigado por esta solução simples que responde à pergunta. A propósito, deixe-me fazer uma pergunta. Qual é o papel de 3 nesta resposta? Se eu substituir 3 por 1, recebo a mesma coisa.
Nome
2

M-x apropos-variable RET isearch.*\(hook\|function\) RETleva você a isearch-update-post-hook, o que parece ser o que você está procurando. Assim ...

(add-hook 'isearch-update-post-hook
          (lambda ()
            (when (> (length isearch-string) 0)
              ;;or whatever
              (recenter)))
          nil t)
politza
fonte
11
Testei seu código, parece bom, espero que a palavra pesquisada já esteja visível antes da pesquisa. Se eu substituir (when (> (length isearch-string) 0)...no seu código (when (> 1 0)..., parece funcionar. Mas não entendo de onde surge o problema.
Nome