vim usuwa sztuczki wsteczne

119
  • Jak usunąć słowo po lewej stronie? Innymi słowy, usuń słowo, gdy kursor znajduje się na jego końcu.
  • Jak usunąć znaki na początku wiersza?
  • Jak usunąć do pierwszej białej spacji po lewej?

  • Jakieś inne sztuczki związane z usuwaniem słów?

Vehomzzz
źródło

Odpowiedzi:

163

Ogólnie rzecz biorąc, d <motion> usunie od bieżącej pozycji do pozycji końcowej po <motion>. To znaczy że:

  1. d <leftArrow> usunie aktualny i lewy znak
  2. d $ usunie od bieżącej pozycji do końca wiersza
  3. d ^ usunie od bieżącego wstecz do pierwszego znaku innego niż biały
  4. d0 usunie od bieżącej wstecz do początku wiersza
  5. dw usuwa bieżące do końca bieżącego słowa (w tym spację końcową)
  6. db usuwa bieżące do początku bieżącego słowa

Przeczytaj ten artykuł, aby dowiedzieć się wszystkiego, co możesz łączyć z poleceniem „d”.

Lucas Oman
źródło
2
Kolejne przydatne skróty na wypadek, gdybyś był dbtrudny do zapamiętania: 5. dw or d<ctrl+rightarrow>i 6. db or d<ctrl+leftarrow>
Crisboot
7
Zamiast pisać, d<leftArrow>zrób to dh, ponieważ hjest kluczem do ruchu w lewo
Dylanthepiguy
4
Dlaczego jest to akceptowana odpowiedź? d <leftArrow> (i żadna z poniższych z wyjątkiem dw) nie usunie znaku pod kursorem zgodnie z oczekiwaniami OP.
listerreg
73

Byłem w tym scenariuszu wiele razy. Chcę pozbyć się wszystkich spacji w wierszu 10, aby łączył się z wierszem 9 po przecinku.

wprowadź opis obrazu tutaj

Jest to w zasadzie proste łączenie linii w VIM.

kJ załatwia sprawę (patrz poniżej)

Linie łączące Vima

Abdo
źródło
9
Szukałem tego wszędzie!
functionvoid
2
haha, chcę tego i nie mam pojęcia, jak to opisać w Google. Na szczęście przewijam w dół =))
Thai Tran
1
Nie mogę uwierzyć, ile razy robiłem to ręcznie. Właśnie tego szukałem, DZIĘKI!
tobiasandersen
1
to jest dokładnie to, czego szukałem. Vim codziennie wieje mi w głowie
singmotor
4
Wyjaśnienie jest następujące: k= Góra, J= Połącz linię poniżej z bieżącą z jedną spacją pomiędzy. Możesz też kgJdołączyć bez spacji. gJ= Połącz linię poniżej bez spacji pomiędzy. Przez ściągawkę: vim.rtorr.com
KhalilRavanna
31

Aby odpowiedzieć na punkcie # 3, diwi dawsą doskonałe.

Randy Morris
źródło
4
To smutne, że nie ma poleceń składających się z dwóch znaków, aby usunąć słowo do tyłu, gdy jesteś na ostatniej literze, ponieważ w standardowych edytorach, takich jak notepad ++, gedit itp., Możesz łatwo użyć CTRL + Backspace ... poza tym vim jest doskonały.
itmuckel
3
@ roggan87 Jeśli jesteś na ostatniej literze słowa, dbusuwa litery poprzedzające ostatnią literę, ale nadal pozostawia ostatnią literę.
Prashanth Chandra
2
Czy możesz wyjaśnić, co robią ii aco robią w środku tych poleceń? Wiem, że początek dto „usuń”, a zakładam, że na końcu wjest „słowo”.
Carl G
1
@CarlG Najlepsze wyjaśnienie znajduje się w :help text-objects. Pierwszy akapit jest bardzo zwięzły i myślę, że bardzo dobrze go opisuje.
Randy Morris
5
<kbd> i </kbd> to „inner”, a <kbd> a </kbd> to „a”, jak w przypadku „a word”. Pierwsza nie będzie zawierała zamykających białych znaków, podczas gdy druga będzie zawierała końcowe białe spacje, jeśli takie istnieją, w przeciwnym razie będzie zawierać poprzedzające białe spacje. Bardzo pomocny, dziękuję.
Carl G
25

W trybie wstawiania:

  • ^ w
  • ^ u
  • nie mogę odpowiedzieć z mojej głowy ;-)

Inaczej:

  • dw
  • v0x
  • nie mogę odpowiedzieć z mojej głowy ;-)
Michael Krelin - haker
źródło
Nie wiedziałem, że mogę usunąć słowo w trybie wstawiania w Vimie. To bardzo pomaga.
Đỗ Tiến
18

W trybie poleceń:

  1. bdw, z powrotem usuń słowo.
  2. d^(do pierwszego niepustego), d0(do pierwszego znaku)
  3. BdW (przejdź do pierwszej białej spacji usuń do następnej białej spacji)

(Społeczność wiki, możesz zhakować).

zoul
źródło
14
  1. db (jeśli kursor znajduje się po słowie) lub bdw
  2. d0(lub d^jeśli chcesz usunąć do pierwszego niepustego znaku)
  3. dElub, dtSpaceaby usunąć do pierwszej spacji lub d/\sEnterusunąć do następnego znaku odstępu.

Edytować

Ponieważ pytanie zostało zmienione w taki sposób, że 3 jest usuwane do pierwszego białego znaku po lewej stronie, moja odpowiedź powinna zmienić się na:

  1. dBlub, dShiftTSpaceaby usunąć z powrotem do pierwszej spacji lub, d?\sEnteraby usunąć do poprzedniego znaku odstępu.

Widzieć:

:help motion.txt
:help WORD
DrAl
źródło
Dobre wezwanie nr 3. Nie byłem pewien, jak sobie poradzić z JAKIMI spacjami. Warto wspomnieć, że dF <SPACE> usunie aż do <SPACE> włącznie, podczas gdy dT <SPACE> pozostawi tam <SPACE>.
Mark Biek,
Przyszedłem tutaj, szukając czegoś takiego bdw. Pozostała postać (ta pierwotnie pod kursorem) dbwciąż mnie irytowała.
Deiwin
8

Czuję, że żadna z odpowiedzi nie jest kompletna:

Ogólnie rzecz biorąc, operację usuwania zwykle rozpoczynasz używając d<motion>, a rzadko używając x.

Uwaga: jeśli Nnie jest określony, zachowuje się jak gdyby N=1(usuwa pojedynczy znak)

Dyskretne znaki:

<N>x - Usuń N znaków po prawej stronie

d<N><left-arrow> - Usuń N znaków po lewej stronie

d<N><right-arrow> - Usuń N znaków po prawej stronie

Granice słów:

Uwaga: Pierwsze słowo poprzedzające / następne to słowo pod kursorem

d<N>b - Usuń od początku poprzedniego N-tego słowa do aktualnej pozycji

d<N>e - Usuń od bieżącej pozycji do końca następnego N-tego słowa

d<N>w- To samo co, d<N>eale z końcowymi odstępami

diw - Usuń całe słowo pod kursorem

daw- To samo co, diwale z końcowymi odstępami

Granice linii:

d0 - Usuń od początku wiersza do aktualnej pozycji

d^ - Usuń od pierwszego niebiałego znaku do bieżącej pozycji

d$ - Usuń od aktualnej pozycji do końca wiersza

Daniel Trugman
źródło
1

/ <CR>x

(wyszukaj spację do przodu, naciśnij enter, aby tam przejść, x, aby usunąć)

Może jest na to bardziej magiczny sposób, ale ja go nie znam.

brettkelly
źródło
Jeśli chcesz usunąć pierwszą białą spację po lewej, naciśnij? zamiast / w moim przykładzie.
brettkelly