Когда Вы выбираете блок и используете > для расположения с отступом, он делает отступ, затем возвращается к нормальному режиму. У меня есть это в моем .vimrc файле:
vnoremap < <gv
vnoremap > >gv
Это позволяет Вам расположить свой выбор с отступом столько время, сколько Вы хотите.
Ваш веб-браузер хранит стек (или список, если хотите) веб-страниц, которые вы посетили в этом окне. Допустим, ваша домашняя страница - google.com, а оттуда вы посещаете еще несколько веб-сайтов: youtube.com, yahoo.com и cnn.com. При посещении последней страницы список выглядит следующим образом:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
Когда вы нажимаете кнопку «Назад», браузер возвращает вас на предыдущую страницу в списке, например:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
На этом этапе вы можете снова нажать «Назад», чтобы перенаправит вас на youtube.com или нажмите «Вперед», чтобы снова попасть на cnn.com. Допустим, вы нажимаете Back во второй раз:
google.com -> youtube.com -> yahoo.com -> cnn.com
^
|
current page
Если теперь вы перейдете, скажем, на abc.com, список изменится и будет выглядеть следующим образом:
google.com -> youtube.com -> abc.com
^
|
current page
Обратите внимание, что yahoo.com и cnn.com исчезли из списка . Это потому, что вы выбрали новый маршрут. Браузер поддерживает только список страниц, которые вы посетили, чтобы попасть туда, где вы находитесь сейчас, а не историю каждой страницы, на которой вы когда-либо были. Браузер также ничего не знает о структуре посещаемого вами сайта, что может привести к неожиданному поведению.
Вы находитесь на сайте покупок (например, ne.com), на котором есть категории и подкатегории продуктов для просмотра. Дизайнер сайта продуманно предоставил хлебные крошки в верхней части окна, чтобы вы могли перемещаться по категориям. Вы начинаете с верхней страницы сайта, нажимаете «Оборудование», затем «Память». Теперь список выглядит следующим образом:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem
^
|
current page
Вы хотите вернуться в категорию «Оборудование», поэтому вместо кнопки «Назад» вы используете навигационные цепочки для перехода к родительской категории. Теперь список браузеров выглядит следующим образом:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
^
|
current page
Согласно структуре сайта, вы перешли назад (на уровень выше), но в браузер вы перешли вперед, потому что вы щелкнули по ссылке. Каждый раз, когда вы нажимаете ссылку или вводите URL-адрес в адресной строке, вы продвигаетесь вперед в том, что касается браузера, независимо от того, ведет ли эта ссылка на страницу, на которой вы уже были.
Наконец, вы хотите вернуться на главную страницу сайта (ne.com). Вы можете использовать панировочные сухари, но на этот раз вы нажмете кнопку «Назад» - кажется очевидным, что это должно поднять вас на один уровень, верно? Но куда это вас приведет?
Многих пользователей (включая меня, в том числе, когда я делаю именно это) сначала сбивает с толку то, что вы «спускаетесь» на уровень ниже, обратно в категорию памяти. Глядя на список страниц, легко понять, почему:
google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
^
|
current page
Чтобы вернуться на главную страницу, используя только кнопку «Назад», потребовалось бы еще два нажатия, которые вернут вас «назад» в категорию «Оборудование» и, наконец, на главную страницу. Нам, программистам, кажется настолько очевидным, что происходит, но это постоянно удивляет обычных пользователей, потому что они не понимают, что браузер ничего не знает об иерархической структуре любого веб-сайта, на котором они оказались.
Было бы здорово, если бы браузеры позволили дизайнерам сайтов запрограммировать кнопку «Назад» так, чтобы она делала очевидную вещь (поднимала вас на уровень выше), а не то, что она делает сейчас?
Редактировать: Комментатор спросил, перезагружает ли браузер страницу или просто отображает его из своего локального кеша.
Ответ в зависимости от обстоятельств. Дизайнеры сайта могут указать, должен ли браузер кэшировать страницу или нет. Для страниц, которые настроены как некэшированные, браузер перезагружает страницу с сервера, когда вы нажимаете «Назад», как если бы вы посещали ее впервые. Для кешированных страниц
Мне нравится думать об этом как о повторной выдаче моего последнего запроса. Если бы вы выполнили простой GET, он, вероятно, вернет то же самое, что и в прошлый раз (за вычетом динамического содержимого). Если вы выполнили POST, вы снова отправите форму (после подтверждения) на сервер.
Основная идея состоит в том, чтобы вернуться к последней странице или логическому разделу сайта.
Глядя на Gmail, вы увидите, если вы выполните поиск и нажмете сообщение, а затем нажмите кнопку «Назад». вернет вас к поиску, который вы выполняли.
Когда вы щелкнете по нему в большинстве браузеров, он либо повторно отправит последний HTTP-запрос, либо загрузит кеш, если браузер кэширует сайты.
Я думаю, самый простой способ объяснить это в псевдокоде:
class Page:
String url, ...
Page previous, next # implements a doubly-linked list
class History:
Page current # current page
void back():
if current.previous == null:
return
current = current.previous
refresh()
void forward():
if current.next == null:
return
current = current.next
refresh()
void loadPage(Page newPage):
newPage.previous = current
current.next = newPage # remove all the future pages
current = current.next
display(current)
История просмотренных страниц хранится в виде стека. Когда вы «открываете» три верхние страницы (например, A, B, C), а затем переходите на другую страницу D, вы не можете снова попасть на B, нажав вперед.
Как уполномоченный, вы должны убедиться, что ваше веб-приложение работает независимо от того, как браузер обрабатывает кнопку «Назад» :-) Отправляет ли он запрос повторно? Новый запрос идентичен старому или чем-то отличается? Будет ли браузер запрашивать у пользователя подтверждение повторной POST? Какие элементы страницы будут запрашиваться повторно, а какие загружаться из кеша? Будет ли браузер учитывать мои заголовки управления кешем?
Ответы на эти вопросы зависят от производителя, версии браузера и пользовательских настроек. Создавайте программное обеспечение так, чтобы все это не имело большого значения.
Извините за не очень прямой ответ, но здесь уже есть несколько прямых ответов.
Браузер загружает последнюю просмотренную страницу перед текущей, а затем следует любому перенаправлению, которое может произойти?
Кажется, я упускаю суть вопроса.