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.