Согласно логике Vim Verb, Noun и Modifier, команда y3s потенциально должна копировать три предложения, но в моей версии Vim этого не происходит. Мне интересно, есть ли для этого причина. Поиск в Интернете кажется, что есть другие способы скопировать определенное количество предложений, но мне любопытно, почему этот подход не работает. Спасибо!





Если вы хотите скопировать 3 строки, вам следует использовать y3y, а не y3s. y расшифровывается как Янк или копия.
Обновлять,
Ответ @Amadan содержит больше объяснений, а также того, почему работает y3y.
OP спрашивает об удалении предложений, а не строк; а s - это «замена» как команда, что не имеет отношения к другой команде (y).
это неправильно, s в данном контексте не заменяет, его просто не существует. y - это команда, и она ждет текстового объекта, а не второй команды! yy - это ярлык для y_. _ означает линию. Итак, y3y - это то же самое, что и y3_ -> «выдернуть 3 строки», поэтому текстовый объект будет _. Пожалуйста, прочтите ответ @Amadan, так как это правильное объяснение.
Просто подойдет 3Y, где Y дернет строку, а 3 повторит ее 3 раза. В Vim нет предложений, только строки, слова и символы.
Здесь несколько заблуждений. Во-первых, есть разница между движения и текстовые объекты.
Движение (:help navigation) - это команда, которая изменяет положение курсора: l вправо, j вниз, ) для предложения вперед, 2Fx назад к предыдущему-предыдущему x в той же строке, /foo/e+2<CR> вперед на 2 символа после конца следующий foo, w начало следующего слова. Команды, аргументом которых является движение, работают с диапазоном текста от текущей позиции до новой позиции, заданной движением. Таким образом, dw удаляет с текущей позиции до начала следующего слова.
Текстовый объект (:help text-objects) определяет семантическую единицу текста; обычно он состоит из двух нажатий клавиш, первое из которых - i (внутри, внутри) или a (a, an, вокруг). i" в двойных кавычках, a( в скобках, внутреннее предложение is (то есть без пробелов вокруг него), 2aw дважды в слово. Таким образом daw удаляет вокруг этого слова (включая пробел) или, проще говоря, удаляет слово.
Разница очевидна: если вы находитесь в середине слова, например Some peng|uins fly (с |, представляющим курсор), dw дает вам Some peng|fly (удаление от курсора до начала следующего слова), а daw дает вам Some |fly (удаление всего слова penguins вместе со следующим пробелом из-за модификатора «вокруг») . diw даст вам Some | fly (не включая пробел при удалении).
Как вы заметите, «предложение» имеет различное отображение в движениях текста (предложение ( назад, предложение ) вперед) и текстовых объектах (внутреннее предложение is, предложение as). Между тем, ( как текстовый объект, эквивалентный ) и b, представляет собой все, что находится внутри или вокруг круглых скобок; а s в качестве движения текста по умолчанию не существует.
Таким образом, y2s не является известным отображением, поскольку вы удаляете с помощью движение (нет i или a), и нет движения s; это ничего не сделает.
Вы можете использовать y2), который будет тянуть около полутора предложений (то есть от курсора до начала второго следующего предложения); или вы можете использовать y2as, чтобы скопировать текущее предложение, следующее предложение и пробел после него; или y2is для того же самого, за исключением последнего пробела; но вы не можете использовать y2s. (Вы также можете записать все это как 2y), 2yas, 2yis.)
В y2y (или эквивалентно 2yy) второй y является дублированием оператора. Это почти правило в Vim, что движение, равное оператору, является строкой: yy восстанавливает строку, dd удаляет строку, gqgq (или gqq) переформатирует строку, == фильтрует строку, gugu (или guu) прописную строку и т. д. Причина в простом удобстве: строки - это то, над чем мы работаем чаще всего, и трудно сделать заклинание быстрее, чем одна и та же клавиша, нажатая дважды. Таким образом, второй y сам по себе не имеет значения: он означает, что первый y работает с линиями (таким образом, y2y или 2yy дергают две линии).
Вся страница :help motion.txt очень полезна для чтения, я ее настоятельно рекомендую.
Спасибо за ответ! Разве
sтакже не представляет собой предложение? если бы, например, я хотел скопировать предложение, я бы сделалyis. Или значение меняется, когда речь идет о числе? Также не могли бы вы рассказать мне, что представляет собой второйyвy2y?