Чому p вставив скопійований рядок після поточного рядка, а не після поточного слова?


12

Припустимо, у мене є наступні чотири рядки:

line1
line2
line3
line4

Тепер, якщо я перейду до line1того, yyхто копіює рядок, а потім перейду до початку line3та зробіть пасту за допомогою 'p', я отримав би

...
line3
line1
line4
....

Чому це вставити line1після line3в новому рядку?

Мій початковий, хоча, тому що символ нового рядка $ був прикріплений до рядка 3, і коли я натиснув pvim, розглядався line3$як одне слово, тож він вставлявся після line3$. Однак, здається, моє розуміння було неправильним. Тому що якщо я це роблю, line3 $а потім роблю pна початку рядка, я отримую той самий результат.

Чому після цього pстворюється новий рядок і вставляється в новий рядок line3?

Відповіді:


21

Коли ви видалили рядок за допомогою dd, ви виконали рядкове видалення.

pКоманда вставляє після позиції курсора. Оскільки реєстр за замовчуванням був заповнений по рядковому вмісту, це означає, що він буде вставлений після рядка, у якому курсор включений.

Якби ви замість цього видалили вміст рядка символічним чином (наприклад, 0D), тоді реєстр мав би бути символом і, отже, вставити після символу, на якому був курсор.

Загалом, поведінка повинна відповідати тому, що очікується від видалення / викручування та вставки. Однак можна змінити -wiseнеобхідність реєстру за допомогою getreg () / setreg () .

Але будьте обережні, роблячи це. З огляду на ваш початковий приклад, просто змінити регістр на символи не видаляє новий рядок, який був частиною видалення. Це просто змінює спосіб пасти.


Детальні рекомендації щодо конкретного сценарію видалення цілого рядка, а також вставлення його в характерному вигляді див. У цій публікації .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.