2013-06-27 4 views
0

Кажется, я вспомнил плагин vim, который позволит вам выполнить «: g/pattern/p», а затем предложит вам выбрать один. Кто-нибудь знает об этом плагине? Или это встроенная функция?Vim: Просмотреть все экземпляры на странице и выбрать один

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

Спасибо!

EDIT:

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

PS. Спасибо всем, кто отвечает. Это отличные ответы.

ответ

3

Вы можете использовать :vim[grep] или :gr[ep].

:vim foo % | cw 

:vim foo % | cw

См :help quickfix.

Если вам нужен плагин, вам нужно будет найти vim.org.

+0

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

+0

Зачем вам нужен плагин? Вы можете делать все, что вы просите, с помощью встроенных команд. После того, как список quickfix открывается, вы можете перемещаться по нему и нажимать '' на результат, чтобы перейти к нему и так далее. Прочтите часть документа, который я вам дал. – romainl

2

Это может приблизиться к вам. Ее не является интерактивным меню, но это не сказать вам номер строки на матч

:g/<regex>/# 

The # сказать глобальным для печати номеров строк. Посмотрите на :h :number (# является синонимом :number)

+0

+1 это то, на что я бы ответил ... –

+0

На самом деле это показывает номера строк без #. То, что я хочу, - это упорядоченный выбор, который я могу выбрать. Я знаю, что есть плагин, который предложит вам выбрать, я просто не могу вспомнить, что это было ... –

+0

@MrA mine не показывает номера строк. Я думаю, у вас есть ': set number' уже в вашем vimrc, который также, похоже, показывает вам номера строк – FDinoff

0
:g/regex/p 

:g выполняет :p по умолчанию, так что он может быть опущен; задний слеш также может быть отброшено:

:g/regex 

Обратите внимание, что :g подскакивает до последнего появления в файле, так что вы можете выполнить N/ (в обычном режиме), чтобы перейти к N-й возникновения. Или, если есть много матчей, и вы не хотите считать, какой из них вы хотите, вы можете, по крайней мере, перейти к своей линии, L, с LG или Lgg или :L.

Если вы не используете :set number но хотите номера строк в выводе :p, добавьте nu[mber] или # в @FDinoff предлагает:

:g/regex/nu 
:g/regex/# 
2

Вы можете заполнить результат в окне quickfix через :vimgrep команды

:vimgrep/regex/ % 

% представляет имя файла текущего буфера. Примечание: буфер должен быть файлом, а не буфером.

Затем используйте команды quickfix, такие как :cnext и :cprev для перемещения по списку.Или откройте список через :copen и нажмите <cr>, чтобы перейти к матчу.

Вы можете :vimgrep любое количество файлов:

  • Все *.c файлы, например, :vimgrep/regex/ *.c.
  • Используйте ** для поиска в глубинных каталогах, например. :vimgrep/regex/ **/*.c.

Вы также можете использовать vimgrep с списком args через :vimgrep/regex/ ##.

Для получения дополнительной справки смотрите:

:h :vimgrep 
:h quickfix 
:h c_% 
:h arglist 
0

Вы можете подтвердить одно изменение за другим во всех открытых буферов с:

:bufdo %s;<pattern>;<replace>;c | update 

:bufdo The проходит через все буферы. c - это флаг для подтверждения всех изменений. update пишет текущий буфер, который позволяет перейти к следующему.

+1

Это не похоже на вопрос вообще? –