2015-08-03 5 views
1

Я ищу конкретную строку в файле в vim и хочу, чтобы все строки с соответствующей строкой отображались, возможно, в другом окне vim.Показать все строки, соответствующие шаблону в vim

В настоящее время я делаю это:

Искать «строка»

/string 

и перейти к следующему согласующего строки

n or N 

Бур, я хочу, чтобы все строки с совпадающей строки в одном место.

Например:

1 Здесь не является строкой

2 Ничто здесь

3 Вот та же строка

Я хочу, линии 1 и 3, которые будут отображаться, как показано ниже, подсветка string

1 Вот строка

3 Здесь же строка

+0

Взгляните на [CtrlSF] (https://github.com/dyng/ctrlsf.vim). –

ответ

4
:g/pattern/#<CR> 

все строки, соответствующие pattern. После этого вы можете сделать :23<CR>, чтобы перейти к строке 23.

:ilist pattern<CR> 

является альтернативой, которая отфильтровывает комментарии и работает через включает.

Команда ниже:

:vimgrep pattern %|cwindow<CR> 

будет использовать Vim встроенный Grep-как функциональность для поиска pattern в текущем файле (%) и отображать результаты в окне QuickFix.

:grep pattern %|cwindow<CR> 

делает то же самое, но использует внешнюю программу. Обратите внимание, что :grep и :vimgrep работают с файлами, а не буферами.

Ссылка:

:help :g 
:help include-search 
:help :vimgrep 
:help :grep 
:help :cwindow 

FWIW, мой плагин vim-qlist сочетает в себе черты :ilistи окно QuickFix.

3

Из комментариев я считаю ваш файл выглядит следующим образом, т.е. номера строк не являются частью текста:

Here is a string 
Nothing here 
Here is the same string 

Вы могли copy all lines matching a pattern в названный регистр («а» в примере ниже), а затем вставьте его в новый файл:

:g/string/y A 
:e newfile 
:"ap 

который получает вас:

Here is a string 
Here is the same string 

В качестве альтернативы, вы можете использовать команду grep и добавить -n включать номера строк:

:grep -n string % 
1:~/tmp.txt [text]       line: 3 of 3, col: 23 (All) 
:!grep -nH -n string /home/christofer/tmp.txt 2>&1| tee /tmp/vHg7GcV/3 
[No write since last change] 
/home/christofer/tmp.txt:1:Here is a string 
/home/christofer/tmp.txt:3:Here is the same string 
(1 of 2): Here is a string 
Press ENTER or type command to continue 

По умолчанию вы получите выход в «командный буфер» вниз на (не знаю его собственного имени), но you can store it in several different places, используя :copen например.

+0

Прохладный. Выглядит неплохо. Но мне также нужны номера строк. –

+1

Я думал, что строки были частью текста. Если вы используете linux, вы можете называть 'grep -n' в буфере, который также дает номера строк. Я попробую и пример. – Backlin

+0

Я использую gVim на окнах –

Смежные вопросы