Получить последний поиск или найти и заменить строку обратно в vim? - PullRequest
7 голосов
/ 06 декабря 2010

Как мне вернуть последнюю строку, которую я использовал для поиска или поиска и замены?

Например, предположим, что я ввожу :%s/some_text/some_other_text/gc, а vim возвращает мне сообщение об ошибке E486: Patterns not found: some_text. Затем я понимаю, что я действительно хотел написать some_magic_text вместо some_text. На этом этапе, как я могу вернуть свою исходную строку в нижнем ряду команд (или как она там называется), чтобы я мог изменить ее и выполнить второй поиск? Есть ли для этого изящная маленькая команда?

В этом кратком примере это выглядит ненужным, но когда текст, который вы хотите заменить, очень длинный, и вы только что набрали одну букву неправильно, фантастически раздражает необходимость перепечатывать все.

И я использую MacVim, если это что-то меняет.

Ответы [ 4 ]

8 голосов
/ 06 декабря 2010

В обычном режиме нажмите q/, чтобы перемещаться по истории поиска!

4 голосов
/ 06 декабря 2010

Проверьте этот vimvcast , который объясняет, что вы хотите.

1 голос
/ 05 апреля 2013

В конце концов, этот ответ может быть хорошим улучшением того, чем вы занимаетесь.

Используйте поиск с выделением, чтобы в интерактивном режиме проверить, действительно ли созданное вами регулярное выражение действительно работает, а затем использовать его в поиске-замене.

  1. :se is (incsearch, лучше укажите se is в вашем .vimrc)
  2. /<search term>
  3. проверьте с помощью n / N, если вы довольны матчами
  4. :s%//<replace term>/g

Если пропустить <search term> в поиске-замене в 4., будет использован последний использованный поиск.

Для доступа к списку последних (поиск-замена) команд используйте q: или, как уже отмечалось, q/ для списка последних условий поиска.

Бонус:
При использовании :se gd, s/<search>/<replace> будет вести себя как s/<search>/<replace>/g.

Доступ только к первому поисковому совпадению в каждой строке можно сделать, добавив /g, поэтому по сути оба поведения просто переключаются.

0 голосов
/ 06 декабря 2010

В целом, вы можете вспомнить любую ранее введенную команду, введя первые несколько символов, а затем несколько раз использовать стрелку для навигации по истории.

В вашем случае вы можете набрать:
:%s<Up>

См. :help history

...