Использование Сосульки Поиск и Замена .
Основная идея Сосульки поиск должен сначала определить поиск контексты , а затем искать в этих контекстах, используя шаблоны, такие как подстроки и регулярные выражения.И вы можете так же легко искать не -контекстов (текст вне контекста), как контексты, которые касаются вашего второго вопроса.
В этом случае контекстами поиска являются строки, содержащие sample
.Это регулярное выражение определяет контексты: .*sample.*
, поскольку .
соответствует любому символу, кроме новой строки.
Для этого поиска вы не хотите заменять весь контекст поиска, поэтому вы должны установить для параметра icicle-search-replace-whole-candidate-flag
значение nil,По умолчанию оно не равно нулю - вам просто нужно нажать M -_ (один раз), чтобы переключить его.Это делает все, что соответствует вашему текущему вводу минибуфера, текстом, который будет заменен, а не тем, что весь контекст будет заменен тем, что заменяется.хочу, в любом порядке.Вы можете переключаться между некоторыми или всеми из них, если хотите.Вы даже можете сортировать контексты различными способами, для простого сравнения или изменения порядка циклирования.(Сортировка никоим образом не меняет ваш текст - контексты сортируются в буфере *Completions*
.)
Но здесь вы действительно заинтересованы в тех контекстах, которые содержат replace
, поэтому вы набираете replace
в минибуфере.Только эти контексты остаются кандидатами.Если вы измените свой ввод минибуфера, набор поисковых запросов - совпадающих контекстов - динамически изменится.Опять же, вы можете посетить любой из соответствующих контекстов в любом порядке, переключаться между ними и т. Д.
Вот шаги:
- C-`,чтобы начать поиск сосулек.
- Вам будет предложено регулярное выражение, которое определяет контексты.Вы набираете
.*sample.*
, затем нажимаете RET . - Вы нажимаете S-TAB , чтобы увидеть контексты, выделенные в вашем файле и перечисленные в буфере
*Completions*
.Контекстами поиска являются кандидаты на завершение . - Вы вводите
replace
, чтобы сузить контексты до тех, которые содержат replace
. - Вы нажали M-_ (подчеркивание мета), чтобы отключить замену всего контекста (при условии, что в данный момент он включен, что по умолчанию).
- Вы нажали C-down (управляющая стрелка вниз)чтобы перейти к первому соответствующему контексту.
- Вы нажимаете S-RET , чтобы заменить часть контекста, которой соответствует ваш текущий ввод (
replace
). - Свы еще не определили замену, вам будет предложено это сделать.Вы набираете
test3
. - , который заменяет первое вхождение
replace
.Вы нажимаете S-RET снова, чтобы заменить следующее, и снова, чтобы заменить следующее, и т. Д.
Обратите внимание, что это позволяет заменять несколько вхождений replace
в одном и том жеконтекст, один за другим.
Если вы знаете, что хотите заменить все вхождений replace
, на шаге 9 вы можете просто нажать M- | насделать это.
Замена только по требованию .По сути, вы просто ищете.Вы сами решаете, какие поисковые хиты посетить.В приведенном мной примере вы циклически переключались между поисковыми хитами, используя C-down
, но вы также могли легко посещать только определенные попадания.
И когда вы посещаете поисковый хит, вы решаете, выполнять лизамена там.Вас не запрашивают за каждое попадание по очереди и заставляют ответить y
или n
и т. Д., Как в query-replace
.
(Если после фильтрации есть только один контекст поиска, например, только одинс sample
и replace
, и вы сразу попадете в этот контекст, вместо того, чтобы получить возможность заменить его части.)
Для поиска не -контекстов вместо контекстов, т. Е. Текста, находящегося вне строки, содержащей sample
, нажмите CM- ~ один раз во время завершения в поиск, чтобы переключить поиск внутри / вне контекста. (Переключение вступает в силу, начиная со следующего поиска, а не с того, где вы нажали C-M- ~ .)
(Альтернативный подход, с некоторыми отличиями, заключается в grep
для строк, содержащих sample
,
затем нажмите C-` в буфере *grep*
, затем действуйте, как указано выше - IOW, используйте grep
для определения контекстов поиска.)