Как заставить движения уважать camelCase или snake_case?

20

Обычно используется или camelCase или snake_case для разделения нескольких слов, которые образуют идентификатор. Было бы неплохо , если бы «слово» движение ( b, w, e) обнаружит эти границы внутреннего идентификатора.

Как можно добиться такого поведения? (Plugin / vimrc / ...?)

Джаспер
источник
1
Я также хотел бы знать это дляsnake_case
Мартин Турной
Возможно, вы сможете что-то сделать с iskeywordнастройкой, но я боюсь, что у этого будет много дополнительных побочных эффектов ... (см. :help word).
Мартин Турной
@Carpetsmoker Я думал, что это сработало snake_case. Кажется, что нет, включил его в вопрос.
Джаспер
4
VimWiki поможет вам: vim.wikia.com/wiki/Moving_through_camel_case_words Я напишу правильный ответ в какой-то момент, если кто-то другой не побьет меня этим.
Богатый
Я лично рассматриваю слово camalCased как целое, и мне не нравится идея разбить слово на полпути из-за регистра или подчеркивания. Обычно я использую fи tключи для управления внутренних движений слов.
Sukima

Ответы:

11

Плагин CamelCaseMotion делает то, что вы хотите. По умолчанию он отображает на клавиши ,w, ,b, ,eкоторые эквивалентны нормальным w, b, e. Он работает как для CamelCase, так и для snake_case:

Пример:

camelCaseWord

Использование d,wудалит camel; использование его снова удалит Case.

Или со случаем змеи:

snake_case_word

d,wудалит snake_, а во второй раз удалит case_.

«Внутренние» движения (такие как diw) также должны работать как положено (как di,w).

Если вы предпочитаете, вы можете также переопределить значение по умолчанию w, bи eс:

map <silent> w <Plug>CamelCaseMotion_w
map <silent> b <Plug>CamelCaseMotion_b
map <silent> e <Plug>CamelCaseMotion_e
sunmap w
sunmap b
sunmap e
omap <silent> iw <Plug>CamelCaseMotion_iw
xmap <silent> iw <Plug>CamelCaseMotion_iw
omap <silent> ib <Plug>CamelCaseMotion_ib
xmap <silent> ib <Plug>CamelCaseMotion_ib
omap <silent> ie <Plug>CamelCaseMotion_ie
xmap <silent> ie <Plug>CamelCaseMotion_ie
Jarlax
источник
2
Обратите внимание, что отображения этого плагина по умолчанию скрывают ,команду (повторить последнее f/ t/ F/ Tдвижение), означая, что если вы хотите использовать эту команду, вам придется ждать задержки (настраивается 'timeoutlen'). К счастью, плагин позволяет вам использовать альтернативные отображения по вашему выбору.
tommcdo
Там , кажется, некоторые побочные эффекты с помощью этого плагина, то есть: dwна , key);когда курсор находится , kкажется , чтобы удалить всю строку (включая символ новой строки), в то время как я ожидал только keyбыть удален ...
Martin Tournoij
1
Я нашел этот плагин, чтобы быть лучше. Комбинирование движения с удалением работает правильно, и оно также ограничивается скобками.
Пасхалис
Незначительный момент, но в первом примере его наверняка уберут, camelа потом Case, нет Word?
Предпочтительный_анон