Nano Hash - криптовалюты, майнинг, программирование

Искать только между определенными номерами строк?

Я знаю, что с помощью команды подстановки Vim вы можете указать диапазон строк:

:12,24s/search/replace

Я хочу иметь возможность указать диапазон и при обычном поиске. Что-то вроде

:12,24/search

Поскольку это, похоже, не работает (по крайней мере, в моей конфигурации Vim), знает ли кто-нибудь, как этого добиться?

vim
16.07.2010

Ответы:


1

Отличный ответ от Акиры. Но покопавшись, я нашел альтернативу. Это не так элегантно, но проще вводить:

 :12,24g/search/

Это даст вам одну раздражающую подсказку, но в конечном итоге она окажется в первой строке диапазона, содержащего искомую строку.

16.07.2010
  • Это сработало для меня без какого-либо быстрого раздражения. Таким образом, команда ‹‹ 195,208g/print/s/$/ # debug/ ›› добавила '# debug' к строкам, содержащим слово 'print' от 195 до 208, и только к этим строкам. Может быть, проблема в версии? Я использую ВИМ 7.2.330. 28.04.2013
  • 7.3, и там написано Press ENTER or type command to continue.. Я недостаточно хорошо разбираюсь в vim, чтобы сказать, откуда могут возникнуть различия. 30.04.2013

  • 2
    :help search-range
    

    а потом

    :help /\%>l
    

    так по сути:

    /\%>12l\%<24lsearch
    
    16.07.2010
  • Я не понимаю, что это добавляет к шаблону :start,stop/pattern/s/tgt/repl/, предложенному Карлом. 28.04.2013
  • @chernevik: проверь время ответов. 28.04.2013
  • ^ За «правильный путь». Vim может предложить множество способов выполнения задачи. 28.07.2016
  • Хотя это абсолютно правильный и принятый ответ, ответ Хаби (stackoverflow.com/a/3264324/ 633910) в большинстве случаев работает для меня практически лучше при выборе визуального диапазона. 12.05.2020
  • Стоит отметить, что использование обычной команды поиска имеет свои преимущества, а именно то, что у вас есть доступ к полному набору команд навигации по совпадениям. Для меня поиск без (постоянного) перемещения курсора (т. е. <C-g>/<G-t> для перебора совпадений) очень удобен, когда я хочу что-то быстро проверить. 04.02.2023

  • 3

    Вам действительно нужны номера строк? Другим способом может быть визуальное выделение диапазона.

    1. выберите диапазон, используя v, V или что-то еще
    2. нажмите ESC, чтобы отменить выбор диапазона
    3. выполните поиск с помощью /\%Vwhat_to_search для поиска «what_to_search» в ранее выбранном диапазоне.

    Это меньше печатать, но не совсем то, что вы просили ;-)

    См. :help %V

    [EDIT] Отлично, я только что узнал, что диапазон для поиска можно изменить после выполнения поиска, выбрав другой диапазон, снова отменив выбор этого диапазона, нажав ESC и нажав n, чтобы повторить поиск. Вим действительно всегда готов делать приятные сюрпризы.

    16.07.2010
  • Я понятия не имел, что VIM отслеживает, что вы только что делали V после выхода из ESC. Хороший ответ 09.05.2023

  • 4

    Продолжайте использовать команду подстановки, но добавьте флаги gc к исходному примеру.

    :12,24s/search//gc

    От :help search-range

    [Для поиска в диапазоне] используйте команду «:substitute» с флагом «c».

    Пример: :.,300s/Pattern//gc

    Эта команда будет искать «Шаблон» от позиции курсора до строки 300. При совпадении вы можете ввести «q», чтобы остановить, или «n», чтобы найти следующее совпадение.

    16.07.2010

    5

    Если есть отметки, например, a и b, то поиск можно ограничить областью между a и b, используя

    /\%>'a\%<'bSearchText
    

    Это можно упростить с помощью cmap

    cmap vmsab /\%>'a\%<'b
    cmap vmscd /\%>'c\%<'d
    
    03.09.2016

    6

    Если вы хотите выполнить поиск до конца файла, используйте $:

    :3,$s/pattern//gn
    

    Это будет поиск от 3-й строки до конца.

    22.01.2020

    7

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

    :900,1000NarrowRegion
    

    Тогда мы сможем заняться поиском

    /thing
    

    Или изменить и записать буфер обратно

    :%s/this/that/g
    :wq
    
    16.02.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..