Al buscar, ¿cómo asegurarse siempre de que algunas líneas después de la palabra resaltada sean visibles?

7

Cuando se realiza search/isearchen un texto, a veces sería deseable ver algunas líneas después de la cadena buscada resaltada, otras palabras para evitar que la palabra resaltada esté en la parte inferior de la ventana.

Por ejemplo, si tenemos el siguiente texto en un búfer, intente buscar la última palabra que pueda ver. Para mí es la palabra principios (como he maximizado el marco). La palabra resaltada (en mi situación, la palabra principios ) está en la parte inferior de la pantalla. Me gustaría ver siempre algunas líneas (si es posible) después de la palabra principios después de buscar.

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
Nombre
fuente
Podría escribir una función que se desplace algunas líneas después de cada golpe y agregarla cuando se llame a la tecla de búsqueda.
ReneFroger
@ReneFrogertjuh Normalmente, si en algún momento se cancela una consulta de búsqueda, se debe volver al estado del búfer antes de realizar la búsqueda.
Nombre

Respuestas:

5
(setq scroll-margin 3)

Funciona en todas partes, no solo durante isearch.

scroll-margin. Valor predeterminado: 0. Número de líneas de margen en la parte superior e inferior de una ventana. Vuelva a colocar la ventana cada vez que el punto se encuentre dentro de estas líneas de la parte superior o inferior de la ventana.

Sozzikins
fuente
Gracias por esta solución simple que responde a la pregunta. Por cierto, déjame hacerte una pregunta. ¿Cuál es el papel de 3 en esta respuesta? Si reemplazo 3 con 1, obtengo lo mismo.
Nombre
2

M-x apropos-variable RET isearch.*\(hook\|function\) RETte lleva a lo isearch-update-post-hookque parece ser lo que estás buscando. Entonces ...

(add-hook 'isearch-update-post-hook
          (lambda ()
            (when (> (length isearch-string) 0)
              ;;or whatever
              (recenter)))
          nil t)
politza
fuente
1
Probé su código, parece estar bien, espere si la palabra buscada ya está visible antes de buscar. Si reemplazo (when (> (length isearch-string) 0)...en su código por (when (> 1 0)...parece que funciona. Pero no entiendo de dónde surge el problema.
Nombre