Команда y3s для копирования трех строк в нормальном режиме в Vim

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
149
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если вы хотите скопировать 3 строки, вам следует использовать y3y, а не y3s. y расшифровывается как Янк или копия.

Обновлять,

Ответ @Amadan содержит больше объяснений, а также того, почему работает y3y.

Спасибо за ответ! Разве s также не представляет собой предложение? если бы, например, я хотел скопировать предложение, я бы сделал yis. Или значение меняется, когда речь идет о числе? Также не могли бы вы рассказать мне, что представляет собой второй y в y2y?

QPTR 28.12.2018 00:51

OP спрашивает об удалении предложений, а не строк; а s - это «замена» как команда, что не имеет отношения к другой команде (y).

Amadan 28.12.2018 07:32

это неправильно, s в данном контексте не заменяет, его просто не существует. y - это команда, и она ждет текстового объекта, а не второй команды! yy - это ярлык для y_. _ означает линию. Итак, y3y - это то же самое, что и y3_ -> «выдернуть 3 строки», поэтому текстовый объект будет _. Пожалуйста, прочтите ответ @Amadan, так как это правильное объяснение.

Doktor OSwaldo 28.12.2018 08:25

Просто подойдет 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 очень полезна для чтения, я ее настоятельно рекомендую.

Другие вопросы по теме