Чому вставка shift працює повністю тільки в режимі вставки?


13

Просто спробували вставити деякий вміст (у Git Bash на сервері CentOS) у файл за допомогою vim.
Я щойно відкрив файл і спробував використовувати shift+, insertі я помітив, що перша половина (приблизно) відсікається, але якщо я встановив vim для вставки режиму і натисніть shift+, insertвсе вставляється ідеально.
Просто цікавилося, чому це?

Спасибі


Гей, у мене теж два великі пальці !!! : D
RonJohn

Відповіді:


24

І Shift+, Insertі « вставлення » в термінал поводяться аналогічно - вони імітують натискання клавіш.

Це важлива відмінність, яку термінали часто неможливо зробити - ви вводите чи вставляєте? Примітка . Деякі термінали підтримують режими " скопленої скоби ", після коментаря @ Джоша я навіть натрапив на вставний модуль із вставним модулем vim у xterm, який може вас зацікавити.

Ваші вставлені дані будуть втрачені до першого символу, який перейде в режим вставки. Ви також можете виявити, що ваш курсор перемістився і що інші частини файлу змінилися (наприклад: змінено регістр / видалено / тощо) ...

Підсумовуючи це, якщо ви вставляєте текст, який ви хочете вставити у файл, спочатку введіть режим вставки.


Спробуйте скопіювати наступний текст і вставте його в термінал під управлінням Vim (не у режимі вставки):

hello how are you

Результат такий самий, як і введення тих самих літер на клавіатурі:

результат вставлення у Vim

У цьому випадку він залишає вас у режимі вставки ...

Тепер спробуйте вийти з режиму вставки - Esc- і вставити наступне

/are
n

Це виконує пошук "є":

результат вставлення у Vim

Тепер вставте це:

:0
dG

О ні ... все пропало!

все зникло


Ви також виявите, що якщо увімкнено відступ, тоді вставлення блоку коду у vim (у режимі вставки) буде надто сильним відступом - воно буде автоматичним відступом, а потім ваш вставлений код буде включати відступи.

def my_print(message):
    print(message)
    print('done...')

вставлення коду

Щоб виправити це, використовуйте команди :set pasteі:set nopaste

вставлення коду (режим вставки)


4
"Це важлива відмінність, яку термінали не можуть зробити - ти друкуєш або вставляєш?" - це не зовсім вірно, деякі термінали та додатки підтримують "скороту вставки", де спеціальна послідовність надсилається до і після вставленого тексту.
Еш,

@Josh: цікаво, дякую ... ваш коментар навіть привів мене до плагіну vim
Attie

Я єдиний, кого турбує set nopaste? Я очікував unset paste.
Ерік Думініл

@ThisGuyHasTwoThumbs як альтернатива, принаймні при використанні Vim, можливо, ви захочете використовувати "+реєстр для взаємодії з системним буфером обміну, оскільки він, як правило, поводитиметься більш розумно. Мінус полягає в тому, що деякі системи або версії Vim можуть використовувати "*замість цього або просто не підтримувати системний буфер обміну, але, на мій досвід, "+він був досить надійним.
8bittree
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.