![Извлечение нескольких внутренних слов в vim](https://rvso.com/image/1395304/%D0%98%D0%B7%D0%B2%D0%BB%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85%20%D0%B2%D0%BD%D1%83%D1%82%D1%80%D0%B5%D0%BD%D0%BD%D0%B8%D1%85%20%D1%81%D0%BB%D0%BE%D0%B2%20%D0%B2%20vim.png)
Внутренние и внешние текстовые объекты word в vim ведут себя по-разному при сочетании с подсчетом. Учитывая текст (курсор находится внутри слова first
)
first second third fourth
оба y2iw
поместят первое слово в регистр, y3iw
/ y4iw
первые два слова и т. д. Поэтому мне нужно как минимум y7iw
выдернуть все четыре (внутренних) слова. Для внешних слов указанное количество соответствует количеству выдернутых слов.
Почему iw
в этом случае два объекта соответствуют одному слову, и можно ли добиться iw
поведения, аналогичного aw
?
решение1
Введите около 5 пробелов и выполните следующие действия viw
: эти 5 пробелов выбираются, поскольку iw
также рассматриваются \s+
как отдельный «объект».
В вашем примере у вас есть 7 iw
объектов:
yiw
дергаетfirst
в безымянном регистре.y2iw
копируетfirst
(с конечным пробелом) в безымянный регистр.y3iw
yanksfirst second
(с пробелом) в безымянном регистре.y4iw
копируетfirst second
(с пробелами) в безымянный регистр.- И так далее…
С другой стороны, aw
считает, что словои любое количество следующих пробеловкак «объект».
В вашем примере у вас есть 4 aw
объекта:
yaw
копируетfirst
(с конечным пробелом) в безымянный регистр.y2aw
копируетfirst second
(с конечным пробелом) в безымянный регистр.y3aw
копируетfirst second third
(с конечным пробелом) в безымянный регистр.y4aw
дергаетfirst second third fourth
в безымянном регистре.
Если вы хотите iw
вести себя как , aw
просто используйте aw
.