Почему vim использует регистры почти для каждой команды?

Мне нравится простота составления команд, имеющих смысловое значение. Как например cib читается как предложение change in brackets - замечательно.

Но зачем vim копировать старое содержимое в мой буфер обмена? Нигде в этой команде я не предложил копировать ее, и проблема гораздо глубже.

dwdiw и т.д. все скопировать в мой буфер обмена / зарегистрироваться. Зачем? Кажется, что это отбрасывает семантическую ценность этих команд, и я бы сказал, что это неожиданное поведение.

Я неправильно использую эти команды или есть какой-то способ полностью отключить эту функцию? В настоящее время я сделал несколько переназначений, как это:

nnoremap dd "_dd

nnoremap cc "_cc

но я бы не хотел этого делать для каждой возможной комбинации неявного копирования.

2 ответа

Решение

По умолчанию большинство команд, о которых вы говорите, используют безымянный регистр, ", Похоже, вы имеете дело с тем, что буфер обмена перезаписывается для всех этих вещей, что может быть признаком настройки clipboard в unnamed или же unnamed_plus,

Чтобы вернуться к стандарту, вы, вероятно, можете сделать set clipboard=, если на выходе set clipboard? это один из этих двух вариантов.

                        *'clipboard'* *'cb'*
'clipboard' 'cb'    string  (default "autoselect,exclude:cons\|linux"
                          for X-windows, "" otherwise)
            global
            {not in Vi}
            {only in GUI versions or when the |+xterm_clipboard|
            feature is included}
    This option is a list of comma separated names.
    These names are recognized:

                        *clipboard-unnamed*
    unnamed     When included, Vim will use the clipboard register '*'
            for all yank, delete, change and put operations which
            would normally go to the unnamed register.  When a
            register is explicitly specified, it will always be
            used regardless of whether "unnamed" is in 'clipboard'
            or not.  The clipboard register can always be
            explicitly accessed using the "* notation.  Also see
            |gui-clipboard|.

                        *clipboard-unnamedplus*
    unnamedplus A variant of the "unnamed" flag which uses the
            clipboard register '+' (|quoteplus|) instead of
            register '*' for all yank, delete, change and put
            operations which would normally go to the unnamed
            register.  When "unnamed" is also included to the
            option, yank operations (but not delete, change or
            put) will additionally copy the text into register
            '*'.
            Only available with the |+X11| feature.
            Availability can be checked with:
                if has('unnamedplus')

Я предложу особое мнение и предположу, что вы, скорее всего, используете Vim без идиоматизма. Это ни в коем случае не неожиданное поведение. Ты используешь cib в качестве подготовки к вставке, так что cib облажаться? Делать vibp вместо.

dwdiw и т.д. все скопировать в мой буфер обмена / зарегистрироваться. Зачем? Кажется, что это отбрасывает семантическую ценность этих команд, и я бы сказал, что это неожиданное поведение.

d затем p является нормальной идиомой Vim для вырезания и вставки (т.е. перемещения текста). Это операция, которую я делаю каждый день, несколько раз в день, и это будет очень раздражающим, если d также не дергать. Вы, кажется, думаете d эквивалентно Del в других текстовых редакторах; это скорее эквивалент ctrl-x (резать). Чтобы отменить это, вы должны сделать "_d как вы сказали; Я нахожу, что мне это никогда не нужно.

В качестве расширенного примера, семантика по умолчанию c и визуальный режим p упрощает обмен двумя объектами; например:

Я выпил всю их еду и съел весь их виски.

Перейти к "выпил", diw (удалите слово и дерните его), перейдите к "съел", viwp (выберите слово и вставьте поверх него, восстанавливая предыдущий контент), ctrl-o вернуться туда, где был "выпил" и P (вставить перед курсором):

Я съел всю их еду и выпил весь их виски.

(У меня также есть плагин, который определяет "параметр функции" как текстовый объект, поэтому я использую ту же идиому в кодировании, если я перепутал или реорганизовал порядок параметров.)

Единственное, что я хочу предотвратить чаще всего, это yank-on-paste в визуальном режиме (чтобы я мог вставлять один и тот же контент несколько раз); для этого я использую

xnoremap <expr> P '"_d"'.v:register.'P'

( отсюда). Это только перекосы P в визуальном режиме (который в остальном идентичен p в визуальном режиме). ни p ни P внешний визуальный режим дергает, так что это не проблема.

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