vi рассматривает тире - и пробел как разделители слов для таких команд, как dw и cw.
Есть ли способ также добавить подчеркивание _?
Я довольно часто хочу изменить часть имени переменной, содержащую символы подчеркивания, например, заменить src_branch на dest_branch. Я заканчиваю подсчетом символов и использую s (например, 3sdest), но было бы намного проще использовать cw (например, cwdest).





Вы можете ввести cf_dest_ и сохранить счетную часть.
Редактировать: или, как предлагается: ct_ изменяет текст прямо перед символом подчеркивания. (Я больше использую движение f, так что мне это пришло более естественно)
Или вы можете переопределить 'iskeyword' (подробнее о :help iskeyword).
Если вы используете vim, вы можете изменить это, установив опцию iskeyword (:he iskeyword). Если это не вариант, вы всегда можете использовать ct_ вместо подсчета.
Просто vi, а не vim. Не знал о ct - это, безусловно, поможет, спасибо
Я просто смотрел на это сам и добавил это в свой .vimrc:
set iskeyword=!-~,^*,^45,^124,^34,192-255,^_
У моего .vimrc были проблемы с ^ | и ^ ", который был частью iskeyword по умолчанию для моей настройки, поэтому я изменил их значения ascii, и он работает нормально. Моя основная модификация заключалась в добавлении" ^ _ "в конец настройки по умолчанию, чтобы vim не видел подчеркивание как часть слова.
К вашему сведению, удаление подчеркивания из iskeyword может испортить подсветку синтаксиса. Если кто-нибудь знает, как заставить vim видеть подчеркивание как несловесный символ для целей навигации, но не для выделения синтаксиса, дайте мне знать.
Вы можете использовать плагин, чтобы получить этот эффект, например, camelcasemotion.
Is there a way to add underscore
_as well?
:set iskeyword-=_
Я использовал vi, а не vim, поэтому не вариант
Есть ли причина использовать vi вместо vim?
Думаю, вы никогда не работали в замкнутой, сильно изменяемой контролируемой среде, управляемой параноидальными PHB! :) т.е. установка vim означала бы мир боли ...
Я уволился с этой работы, а вы не смогли мне заплатить достаточно, чтобы вернуться.
Эта команда работает путем редактирования 'iskeyword' вариант. Его значение по умолчанию в UNIX - "@,48-57,_,192-255", а set-= заменяет его на "@,48-57,192-255".
@ РориО'Кейн. Я повторю еще раз, это vi, а не vim. Нет возможности использовать iskeyword.
@JoeWatkins Я опубликовал эту информацию о 'iskeyword' не для вас, а для всех пользователей Vim, которые являются во главе с Google.
@ RoryO'Kane И мы благодарим вас за это. Однако при этом каждый _ считается отдельным словом. Есть ли способ заставить его пропустить его, поскольку он делает пробелы при движении w?
@OllieFord Из документации для w и word не похоже, что есть какой-либо встроенный способ. Если вы хотите, чтобы w и подобные движения работали по-другому, вам придется заново привязать их к функциям, предоставляемым плагином или вами. Если вы пишете свое собственное движение, плагин vim-textobj-user также может помочь вам создать эквивалентные текстовые объекты (iw, aw).
Еще один хороший вариант в таких случаях - использовать плагин верблюдодвижение.
Он добавляет новые движения ,b, ,e и ,w, которые работают аналогично b, e и w, за исключением того, что они распознают слова CamelCase и snake_case. С его помощью вы можете использовать
c,edest
и это заменит "src_branch" на "dest_branch", если ваш курсор был на первом символе "src_branch".
Чтобы перейти к следующему символу подчеркивания, введите "df_" Чтобы перейти к следующему символу подчеркивания, введите "cf_" ПРИМЕЧАНИЕ: не включайте двойные кавычки.
FWIW вы можете избежать подсчета с
ct_dest