Как работает команда поиска `//` в Vim? - PullRequest
12 голосов
/ 21 октября 2010

После поиска чего-то, если вы нажмете //, вы, похоже, получите следующий результат. Чем это отличается от n? Как вы должны использовать это? Что соответствует //e, и какие еще есть варианты для //?

Ответы [ 3 ]

16 голосов
/ 21 октября 2010

Команда поиска имеет следующий формат:

/pattern/offset<cr>

Если часть pattern пропущена, поиск ищет последний шаблон, который был найден. Если смещение пропущено, смещение не применяется. Смещение - это в основном то, что нужно сделать с курсором, когда вы нашли pattern элемент.

Большинство vi пользователей знакомы с вариацией без смещения /pax<cr> и повторным последним поиском /<cr>, что эквивалентно n.

В ваших конкретных примерах //<cr> совпадает с /<cr>, и это означает, что повторите последний поиск и не применяйте смещение.

С другой стороны, //e<cr> означает повторить последний поиск и переместить курсор в конец найденного элемента. Смещения:

[num]         [num] lines downwards, in column 1
+[num]        [num] lines downwards, in column 1
-[num]        [num] lines upwards, in column 1
e[+num]       [num] characters to the right of the end of the match
e[-num]       [num] characters to the left of the end of the match
s[+num]       [num] characters to the right of the start of the match
s[-num]       [num] characters to the left of the start of the match
b[+num]       [num] identical to s[+num] above (mnemonic: begin)
b[-num]       [num] identical to s[-num] above (mnemonic: begin)
;{pattern}    perform another search, see |//;|

плюс или минус без num использует 1.

9 голосов
/ 21 октября 2010

Одной из приятных особенностей // является то, что вы можете использовать ее с командой s. Поэтому, если вы сначала ищете /Foo, а затем решите заменить его на Bar, вы можете сделать это без повторения шаблона. Просто сделай :%s//Bar/g

Очевидно, что это гораздо полезнее, если шаблон немного сложнее.

4 голосов
/ 21 октября 2010

//<CR> означает повторить поиск последнего шаблона без смещения.

//e<CR> означает повторить поиск последнего шаблона, но приземлиться в конце совпадения.

n совпадает с /<CR> в том смысле, что он использует последний шаблон и последнее смещение, однако n сохраняет последнее направление, в то время как / всегда находит следующий match.

См. :h last-pattern и :h search-offset для подробного объяснения этих команд и их параметров.

...