Поиск / замена Vim: что мне нужно убежать? - PullRequest
9 голосов
/ 16 декабря 2011

Я пытаюсь найти и заменить $data['user'] на $data['sessionUser'].

Однако независимо от того, какую строку поиска я использую, в результате я всегда получаю «шаблон не найден».

Итак, что будет правильной строкой поиска? Мне нужно сбежать от любого из этих персонажей? :%s/$data['user']/$data['sessionUser']/g

Ответы [ 5 ]

3 голосов
/ 17 декабря 2011

С полученными ответами нет ничего плохого, но вы можете сделать это:

:%s/$data\['\zsuser\ze']/sessionUser/g

\zs и \ze можно использовать для разграничения той части матча, на которую влияет замена,Вам не нужно экранировать $, так как он находится в начале паттерна и не может соответствовать EOL здесь.И вам не нужно экранировать ], так как у него нет соответствующего начала [.Однако, если вы не помните все правила, убежать от этих персонажей не составит никакого труда.Смотрите: help pattern.txt для получения полной информации, но не пытайтесь переварить все это за один раз!

Если вы хотите стать модным, вы можете сделать:

:%s/$data\['\zsuser\ze']/session\u&/g

& относится ко всему сопоставленному тексту (разделенному \zs и \ze, если присутствует), поэтому в этом случае он становится «пользователем».\u при использовании в замещающей строке делает следующий символ прописным.Надеюсь, это поможет.

3 голосов
/ 16 декабря 2011
:%s/\$data\[\'user\'\]/$data['sessionUser']/g

Я не проверял это, но я думаю, это должно работать.

2 голосов
/ 16 декабря 2011

Поиск и замена в vim практически идентичны sed, поэтому используйте те же экранированные значения, что и при этом:

:%s/\$data\['user'\]/$data['session']/g

Обратите внимание, что вам действительно нужно бежатьспециальные символы в поисковой части (часть между первым набором // с).Единственный символ, который вам нужно экранировать в замещающей части, - это сам экранирующий символ \ (который вы здесь не используете).

1 голос
/ 16 декабря 2011

Символ [ имеет значение в регулярном выражении.Он обозначает диапазоны символов .Символ $ тоже имеет значение.Он обозначает конечный якорь .Таким образом, вы должны избежать многих вещей.Я предлагаю вам попробовать небольшой плагин вроде this или this one и использовать визуальный поиск.

0 голосов
/ 30 мая 2019

Вот список всех специальных символов поиска, которые вы должны экранировать в Vim: ^$.*[~

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...