Dlaczego p wkleił skopiowany wiersz po bieżącym wierszu zamiast po bieżącym słowie?


12

Załóżmy, że mam następujące cztery linie:

line1
line2
line3
line4

Teraz, jeśli pójdę line1i zrobię polecenie, yyktóre kopiuje linię, a następnie przejdę do początku line3i zrobię wklej używając „p”, dostanę

...
line3
line1
line4
....

Dlaczego wkleił line1po line3nowej linii?

Mój początkowy był jednak taki, że znak nowej linii $ został dołączony do wiersza 3, a kiedy nacisnąłem pvim, uważałem go za line3$jedno słowo, więc wkleił się po nim line3$. Wydaje się jednak, że moje zrozumienie było błędne. Bo jeśli to zrobię, line3 $a potem zrobię pna początku linii, otrzymam ten sam wynik.

Dlaczego po putworzeniu nowej linii i wklejaniu nowej linii line3?

Odpowiedzi:


21

Kiedy usunąłeś linię za pomocą dd, wykonałeś usuwanie linii.

pPolecenie wkleja po kursora. Ponieważ domyślny rejestr został wypełniony zawartością linii, oznacza to, że wklei się po linii, na której znajduje się kursor.

Jeśli zamiast tego usunąłeś zawartość wiersza w sposób znakowy (np. 0D), Wówczas rejestr byłby znakowy i dlatego zostałby wklejony po znaku, na którym znajdował się kursor.

Zasadniczo zachowanie powinno być zgodne z oczekiwaniami po usunięciu / szarpnięciu i wklejeniu. Możliwe jest jednak zmodyfikowanie -wiserodzaju rejestru za pomocą getreg () / setreg () .

Bądź jednak ostrożny. Biorąc pod uwagę twój początkowy przykład, zwykła zmiana rejestru na znakowy nie usuwa nowego wiersza, który był częścią usuwania. Zmienia to po prostu sposób wklejania.


Aby zapoznać się z zaleceniami dotyczącymi konkretnego scenariusza usuwania całej linii, ale wklejania jej znakowo, zobacz ten post .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.