As I already wrote in my comment 3 days ago something like this should work

    {% paginate craft.entries.section('mySection').limit(10) as pageInfo, pageEntries %}
    
    {% for page, url in pageInfo.getPrevUrls(3) %}
        <a href="{{ url }}">{{ page }}</a>
    {% endfor %}
    
    <span class="current">{{ pageInfo.currentPage }}</span>
    
    {% for page, url in pageInfo.getNextUrls(3) %}
        <a href="{{ url }}">{{ page }}</a>
    {% endfor %}
    
    {% if pageInfo.totalPages - pageInfo.currentPage > 3 %}
        <span>...</span>
    
        <a href="{{ pageInfo.lastUrl }}">{{pageInfo.totalPages}}</a>
    {% endif %}

**[EDIT]:** In the above script you will come across situations where the gap sometimes occurs between consecutive numbers, which can look silly.

[![Gap between consecutive numbers][1]][1]

[![Single page gap][2]][2]

To fix this you can add a little extra logic to it:

    {% set amountVisible = amountVisible|default(2) %}
    {% if pageInfo.currentPage > amountVisible + 1 %}
        <a href="{{ pageInfo.firstUrl }}">1</a>

        {% if pageInfo.currentPage == amountVisible + 3 %}
            <a href="{{ pageInfo.getPageUrl(2) }}">2</a>
        {% elseif pageInfo.currentPage > amountVisible + 3 %}
            <span>...</span>
        {% endif %}
    {% endif %}

    {% for page, url in pageInfo.getPrevUrls(amountVisible) %}
        <a href="{{ url }}">{{ page }}</a>
    {% endfor %}

    <span class="current">{{ pageInfo.currentPage }}</span>

    {% for page, url in pageInfo.getNextUrls(amountVisible) %}
        <a href="{{ url }}">{{ page }}</a>
    {% endfor %}

    {% if pageInfo.totalPages - pageInfo.currentPage > amountVisible %}
        {% if pageInfo.totalPages - pageInfo.currentPage == amountVisible + 2 %}
            <a href="{{ pageInfo.getPageUrl(pageInfo.totalPages - 1) }}">{{pageInfo.totalPages - 1}}</a>
        {% elseif pageInfo.totalPages - pageInfo.currentPage > amountVisible + 1 %}
            <span>...</span>
        {% endif %}

        <a href="{{ pageInfo.lastUrl }}">{{pageInfo.totalPages}}</a>
    {% endif %}

Now this added logic will do two things:

 1. If there is no gap, it won't render a thing.
 2. If the gap only amounts to one page it will render a page number instead.

This results in the following:

[![No more "useless" gaps][3]][3]

As an added bonus: if you add the `amountVisible` variable on top with a default value you can put this in a twig partial which you can then easily implement on the paged view like so:

`{% include 'partials/pager' with { pageInfo: pageInfo, amountVisible: 3 } %}`

(Note that passing `pageInfo` explicitly is not required, but I do it for the sake of completeness and to prevent accidental cleanups of "unused" vars.)


  [1]: https://i.sstatic.net/E8it6.png
  [2]: https://i.sstatic.net/2BIsM.png
  [3]: https://i.sstatic.net/coymK.png