Один лайнер
Я нашел простую замену регулярного выражения (при условии, что установлено 'magic'):
:s/ \([a-zA-Z]\)/\u\1/g
Это соответствует любой отдельной букве после пробела, сохраняя букву. Затем он заменяет его на сохраненную букву в верхнем регистре ( \u
= верхний регистр, \1
= первое сохраненное совпадение) для каждого совпадения в строке.
Применить ко всему файлу, поставив %
между :
и s
.
Недостатком этого решения является то, что оно аналогично (что подходит для ваших примеров), но не дало бы результата, если бы вы только хотели, чтобы верблюд нашел несколько слов из множества в строке.
Более полное решение
map <leader>g~ :set opfunc=MyCamelCase<CR>g@
function! MyCamelCase(type, ...)
let searchsave=@/
silent s/\%>'\[ \([a-zA-Z]\)\%<']/\u\1/g
let @/=searchsave
endfunction
Это создает новый оператор, который может работать с движением. Если у вас есть <leader>
как \
, то с учетом следующего текста (с |
курсором):
This is some |example text to work with.
Печатание \g~3w
дает
This is some exampleTextTo work with.
То есть у нас верблюд в чехле за 3 слова.
Описание этой замены:
s/
начинается замена.
\%>'\[
немного больно \%>'m
Говорит , что нужно справа от знака. Мы хотим пометить [
, но это также следует избегать в этом паттерне. Таким образом, начинается матч после движения, данного оператору.
\([a-zA-Z\)
такой же, как и из одной строки выше.
\%<']
это другой конец, совпадающий до конца движения.
/\u\1/g
это замена с одной строки выше.
В качестве альтернативы я использую плагин vim- abolish, который предлагает функцию принуждения:
источник
Вы можете создать рекурсивный макрос, который делает это для одной строки со следующими нажатиями клавиш:
(Обратите внимание, что пробел между
f
иx
- это пробел, а не пауза)В деталях:
Очистите регистр q. Это необходимо, потому что мы создаем рекурсивный макрос. (См. Шаг 5.):
qqq
Начать запись макроса в регистр q:
qq
Вы не можете использовать
w
движение здесь, потому что вы хотите, чтобы макрос прерывался при достижении конца строки, а не переходил к следующей строке. Вместо этого перейдите к следующему пробелу в строке, нажавf
клавишу, а затем пробел:f<space>
Удалите пробел и заглавные буквы следующей буквы:
xgUl
Recurse. Поскольку мы очистили
q
регистр на шаге 1, в нем еще ничего нет, поэтому это ничего не даст:@q
Сохранить макрос:
q
Затем вы можете применить этот макрос к нескольким строкам, используя диапазон:
Примените макрос к каждой строке в файле:
Примените макрос к строкам 2–5 включительно:
Сделайте визуальный выбор, а затем введите
:normal @q
. Это будет предварительно заполнять командную строку при нажатии:
клавиши, в результате чего получится команда, которая применяет макрос к каждой строке в выделении:источник
q
регистр, как этоqq
происходит до того, как он начнет записывать нажатия клавиш. На самом деле, именно поэтомуqqq
работает, чтобы очиститьq
регистр :)q
реестр (т. Е. ИспользованияqQ
), тогда, возможно, потребуется очистить его сначала.vim -u NONE
). Существующее содержимое очищается только при сохранении регистра на шаге 6. Поэтому необходимо очистить регистр перед началом, если вы хотите выполнить рекурсию.См. Http://vim.wikia.com/wiki/Changing_case_with_regular_expressions. Это объясняет модификаторы \ U, \ L, \ u, \ l довольно ясно и кратко!
Суть его заключается в следующем:
В некоторых случаях вам может понадобиться просмотреть файл и изменить регистр символов, которые соответствуют некоторым произвольным критериям. Если вы хорошо понимаете регулярные выражения, вы можете сделать это довольно легко.
Это так же просто, как поместить \ U или \ L перед обратными ссылками, регистр которых вы хотите изменить, и \ E в конце. Vim сделает текст в верхнем или нижнем регистре обратной ссылки (соответственно). Используйте \ u и \ l (без \ E в конце), чтобы просто изменить регистр самого первого символа в обратной ссылке.
(«Обратная ссылка» - это часть регулярного выражения, которая ссылается на предыдущую часть регулярного выражения. Наиболее распространенными обратными ссылками являются &, \ 1, \ 2, \ 3, ..., \ 9).
Некоторые примеры, демонстрирующие мощь этой техники:
Строчные весь файл
(& это удобная обратная ссылка, которая ссылается на полный текст матча.)
Прописные буквы всех слов, которым предшествует <(то есть открываются имена тегов HTML):
Обратите внимание также на команды gu и gU.
Например, ggguG будет в нижнем регистре весь файл. (gg = перейти наверх, gu = строчные буквы, G = перейти к EOF).
Используя \ 0 общую обратную ссылку вместо именных (\ 1, \ 2 и т. Д.), Вы можете сохранить некоторые данные для замены в разделе замены регулярного выражения.
Это регулярное выражение в верхнем регистре - явный набор слов в верхнем регистре в файле:
Не ракетостроение, но в противном случае вам придется сделать это:
источник