Суббота
30.11.2024, 03:48
| RSS
Главная
Меню сайта

Категории раздела
Madriva [3]
Ubuntu (KUbuntu, EdUbuntu, XUbuntu) [78]
SUSE [1]
Fedora Core [9]
ASPLinux [1]
Debian [16]
Gentoo [3]
Другие [167]

Мини-чат

Наш опрос
Оцените мой сайт
Всего ответов: 45

Статистика

Rambler's Top100Рейтинг@Mail.ru

Главная » 2011 » Декабрь » 4 » Про поиск в Vim
Про поиск в Vim
17:57

Про поиск в Vim

Решившись наконец поразбираться с реализацией поиска в Виме, в очередной раз был поражён тому, насколько мощный передо мной текстовый редактор. Казалось бы поиск - он и в Африке поиск! Но размер страницы справочника по шаблонам поиска в 1296 строк заставил задуматься. Относительно меньше, но всё равное много занимает страница руководства по непосредственно поиску. Я не буду пересказывать и переводить это, но попробую кратко рассказать о том, что показалось интересным и каким приёмами пользуюсь я сам.

Поиск в открытых файлах

Что бы найти какую-либо строку в открытом файле достаточно в нормальном режиме набрать /somestring что бы искать с начала файла, либо ?somestring - с конца. n/N - переместит курсор к следующему вхождению строки. [I - недавнее открытие :) Позволяет быстро просмотреть строки, в которых содержится искомое слово.

Использование [I для быстрого просмотра результатов поиска
Вместо того, что бы набирать запрос поиска, можно нажать */# и Вим переместит вас на место первого вхождения слова под курсором аналогично "старшим" командам.
Иногда бывает нужно найти строку, содержащую либо foo, либо bar. В таком случае можно использовать возможность альтернатив в поиске /foo\|bar. \| по сути оператор OR, \& в свою очердь - AND.

Поиск по файловой системе

Признаюсь, долгое время я избегал использовать встроенную поддержку grep в Виме. Открывал ещё одно окно/вкладку терминала и запускал grep -R -A ... *. Не могу объяснить почему :) Тем не менее, настал момент переучиваться.
В Виме есть 2 механизма поиска по файлам: встроенный "греп" vimgrep и обычный вызов знаменитой утилиты. Встроенный механизм поиска по файлам хорош в первую очередь тем, что работает везде, где и сам Вим. Также декларируется такая полезная штука как автоматическое распознавание кодировки файла и какой формат окончания строки используется. Но в том же время вимовский объективно медленнее обычного грепа. Более того, тем, кто привык пользоваться последним сразу же будет непривычно использовать встроенный и указывать его параметры. В качестве эксперимента поищем строку domXss в 5036 файлах проекта w3af.
  • vimgrep domXss **/* занял около 13 секунд
  • grep -R domXss * занял около 1 секунды
Результат говорит сам за себя! Если вам по каким-то причинам не хочется использовать утилиту grep, то есть возможность установкой 'grepprg' задать вызов другой программы, которая позволяет выводить результат своей работы в grep-подобном формате.

Поиск по файлам в Виме
И встроенный поиск и внешний выводят свои результаты и позволяют по ним переходить через т.н. окно ошибок (его можно увидеть на снимке экрана). По нажатию Enter на строке в окне ошибок открывается файл на месте с найденной строкой.
  • copen/cclose - открываем/закрываем окно ошибок
  • cnext/cprevious - перемещаемся к следующему/предыдущему результату
Окно ошибок входит в интересную концепцию быстрой правки (:help quickfix), которая есть в Виме. Этот псевдорежим призван ускорить рутинные действия: "правка-компилирование-правка". Как вы уже догадались, это же окно ошибок используется главным образом именно для навигации по выхлопу компилятора и быстрого исправления обнаруженных ошибок.

Полезности в конфиге

Обычно я ищу без учёта регистра букв, поэтому добавляю в конфиг следующую строку:
set ignorecase
При этом, всё-таки бывают случаи, когда необходимо явно указать регистр, для этого указываем:
set smartcase
И ищем уже примерно так: /abCda, Вим будет искать именно в таком виде эту строку. Мне лень набирать полностью запрос и хочется по мере набора приближаться к результату поиска. Эта штука есть во всех уважающих себя текстовых редакторах и называется инкрементальный поиск:
set incsearch
Результаты поиска не подсвечивать:
set nohlsearch
А это маленький хинт, который позволяет по нажатию клавиши ; сконструировать запрос на замену слова под курсором:
nmap ; :%s/\<<c-r>=expand("<cword>")<cr>\>/

Продолжение следует...

В Вим существует понятие шаблона поиска. По сути это возможность использовать специальные символы и подстановки для поиска сложных запросов. Кому знакомы регулярные выражения, тот сразу поймёт в чем дело :) Думаю, что надо будет обязательно как-нибудь и на них подробно остановиться.

Источник:http://www.allaboutvim.ru/2011/12/vim.html

Категория: Другие | Просмотров: 1023 | Добавил: tol | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа

Поиск

Друзья сайта

  • Администрация

    Andry


    Tol


    Copyright MyCorp © 2024
    Хостинг от uCoz