Usuwanie w Vimie, a następnie wklejanie bez nowej linii


11

Wiele razy w vimie chciałbym całkowicie usunąć linię, więc używam dd. Muszę jednak wkleić tę linię do innej pozycji w linii, ale wstawia ona nową linię przed wklejeniem, co bardzo utrudnia uzyskanie pożądanego rezultatu. Na przykład,

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}

kiedy robię to z powyższym kodem, otrzymuję:

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}

co jest bardzo dalekie od wyniku, który chcę ... jak mogę ukryć to zachowanie nowego wiersza lub użyć innej metody, która robi to bardzo skutecznie? Nie sądzę, aby d $ było dobre, ponieważ nie tylko muszę przejść do początku linii, ale jeśli chcę również usunąć pustą linię, muszę ją usunąć w innym rejestrze, uważam, że powinien istnieć łatwiejszy sposób! Dzięki.



1
nie jest to duplikat, ponieważ powiedziałem, że chcę bardziej efektywnego sposobu niż przejście do początku linii, a także chcę usunąć całą linię ze znakiem nowej linii .... nie tylko jej treść
— fYre

Och, rozumiem teraz, co masz na myśli. Po prostu nie było dla mnie jasne, co próbujesz osiągnąć.
— EvergreenTree,

1
0Dusuń linię oprócz podziału linii. I niż gJłączyć linie. Teraz możesz umieścić tekst bez linii podziału i bez pustej linii.
— Alex Kroll,

Odpowiedzi:


9

Możesz przejść w dowolnym miejscu linii powyżej linii, którą chcesz usunąć, a następnie naciśnij JDi wklej ją pw żądanym punkcie.

  • Jłączy dwie linie i przenosi cię na początku tekstu, który chcesz usunąć. Spowoduje to usunięcie znaku nowej linii i wcięcia linii, którą chcesz przenieść.
  • D usuwa z bieżącej pozycji kursora do końca linii, ale zachowuje znak nowej linii.

Podpowiedź: Możesz użyć :pujeśli usunięte z Dlub z szarpnięciem y$i wklejony z nowej linii.


3

Nie jest to naprawdę prostsze, ale nieco bardziej wydajne, można także tworzyć mapy w trybie normalnym dla obu sekwencji:

  • szarpanie: następnie przejdź do linii, którą chcesz przenieść ^D"_dd
  • wklejanie: następnie przejdź do słowa, które chcesz zastąpić viwp

2

Możesz osiągnąć coś, co działa całkiem dobrze z imap. Dodaj następujące elementy do vimrc:

inoremap <c-a> <c-r>1<esc>k$Jxi

Spowoduje to utworzenie mapowania CTRL-a, które wklei ostatnio usunięty tekst (z ddlub podobnym). Jeśli wolisz, możesz oczywiście użyć innego klucza do mapowania.

Bibliografia:

:h i_CTRL-R
:h quote1
:h J

1

To też jest dla mnie trochę, nigdy wcześniej nie myślałem o optymalizacji, ale to mapowanie działa:

nmap dil ^d$

diljest „Usuń w wierszu”, podobnie diw, di"itp


1

Wklej bez nowej linii

Umieść to w swoim pliku .vimrc:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx

Przykład:

<span style="color:">danger</span>

Teraz możesz wpisać, gpaby wstawić #D51B3Fpo, color:gdy mój kursor jest :w trybie normalnym.

Jank bez nowej linii

Użyj odpowiedzi Flukusa:

" Delete current line without yanking the line breaks
nnoremap dil ^d$

jako akronim usuwania linii wewnętrznej . Pozbywa się to również wiodących wcięć.


0

Możesz zaznaczyć tekst, który chcesz skopiować, naciskając, va następnie przenieść go do bufora, naciskając, ya następnie wklejając go w dowolnym miejscu p. Nie wstawia żadnej nowej linii.


To prawda, ale nadal pozostawia pustą linię.
— muru
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.