Как мне измениться до следующего подчеркивания в VIm?

60

Если у меня есть этот текст в Vim, и мой курсор находится на первом символе:

www.foo.com

Я знаю, что я могу сделать:

  • cwизменить до первого периода, потому что word(строчная w) заканчивается на любой пунктуации ИЛИ пробеле
  • cWизменить весь адрес, потому что Word(в верхнем регистре w) заканчивается только в пробелах

Теперь, что если у меня есть это:

stupid_method_name

и хотите изменить это на это?

awesome_method_name

И то, cwи другое cWизменилось, но я просто хочу изменить фрагмент перед подчеркиванием.

Моя резервная техника - c/_это «изменяйся до тех пор, пока ты не достигнешь следующего подчеркивания в поиске», но для меня это также вызывает выделение всех подчеркиваний в качестве поисковых терминов, что немного раздражает.

Есть такой спецификатор, как wили Wон не включает подчеркивания?

Натан Лонг
источник
Что не так с :nohl?
Игнасио Васкес-Абрамс
Я действительно хочу найти условия , которые будут подсвеченные большую часть времени; только не тогда, когда я использую поиск как движение. (Я также только что задал этот вопрос: superuser.com/questions/244042/… )
Натан Лонг,

Ответы:

82

Вы можете сделать cf_. f не выделит искомый символ.

Вы также можете сделать, ct_если вы не хотите включать _.

Двуликий
источник
15
Вы путаете F, T, F и T. fдвижется вперед к персонажу; Fдвижется назад к персонажу; tдвижется вперед прямо перед персонажем; и Tперемещается назад к персонажу справа от целевого персонажа. Итак, ваш второй пример должен был быть ct_.
garyjohn
2
Теперь мой ответ исправлен. Извините и спасибо.
doubleface
4
ct_это именно то, что я хотел. Теперь это стало частью моего обычного рабочего процесса. Спасибо!
Натан Лонг
1
Это также невероятно расширяемый и, следовательно, мощный. Я предполагаю, что вы можете поставить любой символ после f или t, и он перейдет к следующему (или предыдущему для заглавных букв) вхождению. Благодарю.
Дом
2
Vim никогда не подведет, только понимание того, на что он способен!
Бенджамин Р
65

Поместите это в ваш .vimrc:

set iskeyword-=_

Тогда _ будет рассматриваться как граница слова (хотя и не граница WORD), а cw может использоваться только для изменения «удивительного», а cW для изменения всего.

Видеть:

:help iskeyword

а также

:help word

для получения дополнительной информации.

радостный
источник
6
Приятно ct_осознавать, что я могу определить свои собственные границы слов, но, подумав, я думаю, что лучшее решение - это, как говорит двойное лицо ниже, так как оно сжато и является поведением по умолчанию vim.
Натан Лонг
Это мой личный фаворит
Джей
2
Мне нравится этот, но он нарушает мою цветовую кодировку синтаксиса в php.
Аарон Сюррейн
Как я могу сбросить или переключить это?
Бех
1

camelcasemotion - это очень удобный плагин vim, который позволяет вам перемещаться по словам при использовании символов подчеркивания или верблюда. Используя этот плагин, вы можете поставить запятую перед многими традиционными командами движения vim, которые позволят вам рассматривать слова в нижнем подчеркивании или записи верблюда как полные слова.

Jdoherty
источник