Найти в Дзене
Блокнот математика

Рубрика "Секреты Вим". В начале было Слово...

Поговорим о словах. Любой текст состоит из слов: текст на естественном языке, программный код, таблица с числовыми данными. Разве что двоичный файл нет, но их и редактируют редко. Что Вим знает о словах? Под словом "Слово" В Виме могут пониматься две вещи. Есть "слово в узком смысле": последовательность букв, цифр, символа _, ЛИБО последовательность любых других непробельных символов. Множество "словных" символов можно изменить посредством опции iskeyword. Пустая строка тоже считается словом. Так, словами будут qwerty, ___, 666, !@$, ... "Слово в широком смысле", или СЛОВО - это последовательность непробельных символов. Разница в том, что в этом предложении 14 слов и 12 СЛОВ. Потому что запятая идет как отдельное слово, но считается частью СЛОВА "том,". Аналогично и точка. В разных случаях нужно разное понимание слова "слово", поэтому у Вима есть два набора команд. Команды такие: w или <S-Right> (Shift + стрелка вправо) прыгают на слово вправо. Могут принимать повторитель. В пару им и

Поговорим о словах. Любой текст состоит из слов: текст на естественном языке, программный код, таблица с числовыми данными. Разве что двоичный файл нет, но их и редактируют редко. Что Вим знает о словах?

Под словом "Слово" В Виме могут пониматься две вещи. Есть "слово в узком смысле": последовательность букв, цифр, символа _, ЛИБО последовательность любых других непробельных символов. Множество "словных" символов можно изменить посредством опции iskeyword. Пустая строка тоже считается словом. Так, словами будут qwerty, ___, 666, !@$, ...

"Слово в широком смысле", или СЛОВО - это последовательность непробельных символов.

Разница в том, что в этом предложении 14 слов и 12 СЛОВ.

Потому что запятая идет как отдельное слово, но считается частью СЛОВА "том,". Аналогично и точка.

В разных случаях нужно разное понимание слова "слово", поэтому у Вима есть два набора команд.

Команды такие: w или <S-Right> (Shift + стрелка вправо) прыгают на слово вправо. Могут принимать повторитель.

В пару им идут W и <C-Right> (Control+стрелка вправо), прыгающие на СЛОВО вправо. Тоже могут принимать повторитель.

Обе попадают на начало слова.

Команды e и E прыгают на конец текущего слова, а с повторителем идут вперед по концам слов. Команды b и B прыгают на начало слова, этого или предыдущих. У них есть синонимы <S-Left> и <C-Left>.

Для комплекта есть ge и gE, идущие назад на конец предыдущего слова.

Фолды считаются как одно слово из одного символа.

Эти команды могут применяться для перемещения курсора. Но могут служить движениями для операторов: dw удалит слово, cw удалит и включит режим вставки (change word), ye скопирует кусок слова от курсора до конца, vb выделит кусок слова от курсора до начала слова.

Есть исключение: cw и cW работают как ce и cE, если курсор на непробельном символе. То есть пробел после слова не будет удален: change word же, то есть просили заменить это слово. Однако dw в такие тонкости не вдается, удаляя все до начала следующего слова.

Еще одно исключение: если w применяется с оператором и последним словом оказалось последнее на строке, действие закончится на конце этого слова, а не перед началом слова на следующей строке.

Что еще надо знать о словах? Якоря, совпадающие на границах слов: \< и \>. Это в шаблонах регулярных выражений. Поиск * слова под курсором вперед и # (поиск назад). Варианты g* и g# ищут слово, но без якорей: если курсор на слове "и", то найдется больше, чем хотелось бы.

Обсудим устройство опции iskeyword и других ей подобных (isident, isfname, isprint). Она содержит список частей, разделенных запятыми. Каждая часть - это либо один код символа, либо диапазон кодов в форме код-код. Код символа может быть десятичным числом от 0 до 255 (один байт) или самим символом ASCII (для цифр, очевидно, не годится, их надо задавать именно кодами 48-57 - это от '0' до '9').

Если часть начинается с крышечки ^, то данный символ или диапазон исключается. Поскольку части считываются слева направо, то исключать надо после включения. Например, a-z,^w означает латинский алфавит. Саму крышечку можно указать в конце диапазона или как последний символ в опции.

Символ @ означает "все буквы", в том числе с диакритикой и русские. Так, @,^a-z означает "буквы, кроме латинских строчных". Сам символ @ вводится диапазоном @-@ или кодом 64.

Я проверил иврит - это тоже считается буквами. Видимо, Вим обращается к функционалу Юникода, распознавая все буквы всех алфавитов, и все подпадают под символ @.

Запятую можно включить, указав ее там, где ожидается код символа. Например, ,,. Так же можно ее и исключить: ,^,.

Удачи, коллеги!

Научно-популярные каналы на Дзене: путеводитель
Новости популярной науки12 марта 2022