Как сделать первую букву слова в Vim заглавной?

Я давно знаю, что могу использовать ~ в Vim для переключения регистра символа. Но есть ли способ сопоставить ключ для написания слова с большой буквы и вернуться к предыдущей позиции?

Например:

I like to drink Coca co[l]

Если мой курсор находится на «l», и я понимаю, что мне нужно сделать букву «c» заглавной, в настоящее время мне нужно сделать:

<C-c> b ~ ll i

Есть ли способ сопоставить одну клавишу, чтобы первая буква слова под курсором была заглавной, а курсор оставался в исходной позиции?


person Patrick    schedule 27.06.2010    source источник
comment
Посмотрите здесь.   -  person Bozhidar Batsov    schedule 27.06.2010
comment
Это тоже хорошее руководство. Спасибо, что поделился.   -  person Patrick    schedule 27.06.2010
comment
ЭТО - вот как следует использовать vim!   -  person kenny    schedule 11.08.2012


Ответы (4)


Лично я предпочитаю не создавать макрос для этого. Нет необходимости заполнять свой .vimrc десятками таких одноразовых решений, потому что решение настолько естественно вытекает из «набора инструментов» стандартных команд Vim, что вы можете просто связать их вместе, как вторая натура.

Я печатаю длинное слово:

the gallicizatio|

(| - позиция курсора). Внезапно я понимаю, что забыл использовать «галлизацию» с большой буквы. Итак, бац !, я нажимаю ESC (который сопоставлен с клавишей Caps Lock на моей клавиатуре, поэтому для этого требуется всего лишь щелчок мизинца), а затем - b~A, и продолжаю печатать, как ни в чем не бывало. Этот заблудший g был написан с заглавной буквы за то время, которое потребовалось бы пользователю Emacs, чтобы начать движение правой рукой к клавишам со стрелками, и я уже перешел к остальной части предложения.

Напротив, с макросом, который я не использовал какое-то время, мне, вероятно, потребовалось бы больше времени, чтобы просто вспомнить, какие клавиши я назначил этому макросу. Лучшее решение - очень хорошо изучить важные «основные» команды, которые можно комбинировать на лету в соответствии с простыми правилами с миллионами возможных эффектов.

person Maxy-B    schedule 10.08.2012
comment
Спасибо за ответ! Хотя для меня запоминание встроенной последовательности команд не имеет никакого значения, чем запоминание созданного мной сопоставления или макроса. Хотя на новой машине, без предпочтительного сопоставления, нужно вернуться к тому, что он помнит во встроенных командах :) - person Patrick; 11.08.2012
comment
@Patrick: дело в том, что вам не нужно запоминать встроенную последовательность команд (b~A в данном случае). Вы помните относительно небольшое количество отдельных встроенных команд и правила для их комбинирования неограниченным количеством способов. Точно так же, как вы можете строить бесконечные новые предложения английского языка, запоминая конечное число морфем и правила их комбинирования. - person Maxy-B; 09.11.2012
comment
пользователь Emacs сделает M-b M-c, чтобы получить тот же результат, не переходя к клавишам со стрелками - person Carlo Rodriguez; 19.10.2014

Я часто делаю это и использую командную строку EX для просмотра нескольких записей, соответствующих условию. В этом случае я использую обратную ссылку, которая выглядит так:

:%s/\(\w\)\(\w*\)/\U\1\L\2/g

и БУМ, проблема решена для всех слов, находящихся в определенном контексте.

РЕДАКТИРОВАТЬ: Посмотрите сюда тоже, только что понял, что есть эта ссылка, на которую есть похожие ответы:

Делайте первые буквы каждого слова с большой буквы. в выделении с помощью vim

person ovatsug25    schedule 02.08.2013

вы также можете использовать макрос

q<register> <C-c> b ~ ll i q

а затем делайте @<register> каждый раз, когда вам нужно его использовать.

person Amir Rachum    schedule 27.06.2010
comment
Проблема с этим подходом состоит в том, что длина ll для каждого слова не определена. - person Patrick; 27.06.2010

person    schedule
comment
Вау, спасибо за быстрый ответ. Это именно то, что я ищу! - person Patrick; 27.06.2010
comment
лучше сделать это m`lb ~ `, чтобы вы могли иметь такой же эффект, даже если вы уже находитесь на первом символе слова. Сам использую - person Hennadii Madan; 08.06.2016
comment
спасибо, но в визуальном режиме (с vmap) не работает. - person ; 26.02.2017