Czy mogę usunąć całą linię, z wyjątkiem podziału linii?


33

Dość powszechną operacją dla mnie w vimie, ponieważ jestem kompulsywno-obsesyjny i lubię utrzymywać moje pliki wolne od białych znaków, jest usuwanie zawartości całej linii, ale nie samej linii (tj. Nie łamanie linii).

Czy istnieje wbudowany sposób, aby to zrobić? Być może d<movement command>operacja?

Jak dotąd najlepsze, jakie mam (na linii, o której mowa) 0d$. Czy jest szybszy sposób?


2
Alternatywą dla ręcznego przycinania białych znaków jest użycie wtyczki, takiej jak vim-better-whiteespace , która wyróżnia końcowe białe znaki, udostępnia polecenie ich usunięcia na raz, a nawet może to zrobić automatycznie po zapisaniu.
— deltab


3
Nawet bez wtyczki możesz globalnie usunąć końcowe białe znaki za pomocą funkcji wyszukiwania i zamiany, np.:%s/\s*$//
— Kyle Strand

Odpowiedzi:


34

Możesz użyć 0Dtego, przejdzie do pierwszego znaku w linii i usunie do końca linii. Pamiętaj, że możesz użyć, ^Djeśli chcesz pozostawić dowolne poprzednie białe znaki w spokoju. Nie można również powtórzyć tych operacji przy użyciu .. Jeśli chcesz operacji, którą można powtórzyć za pomocą .polecenia, zapoznaj się z odpowiedzią Dawida Pana.

Tematy pomocy:

  • :help 0
  • :help D
  • :help ^

4
Chociaż jest to bezpośrednie, do rzeczy i (prawdopodobnie) najmniejszej liczby naciśnięć klawiszy, nie można go powtórzyć za pomocą .polecenia. Z tego powodu uważam cc<Esc>lub S<Esc>jest bardziej atrakcyjny, jeśli zależy ci na powtarzaniu.
— tommcdo

To prawda. Możesz jednak zapisać go jako makro i powtórzyć za pomocą ..
— EvergreenTree

Zasadniczo makr nie można powtarzać za pomocą .. Działają tak, jakby te naciśnięcia klawiszy były wprowadzane interaktywnie, więc poszczególne polecenia są traktowane osobno. Użycie .spowoduje powtórzenie tylko ostatniego polecenia w makrze.
— tommcdo

Przetestowałem to i nie tak to dla mnie działa. Jeśli zapisz makro, użyj go za pomocą @{reg}, możesz .później powtórzyć .
— EvergreenTree

1
Powtarzasz tylko ostatnie polecenie makra, czyli D. Po 0Doperacji kursor pozostanie w kolumnie 0. Jeśli kursor znajduje się już na początku linii (po przejściu do innej), będzie wyglądać, jakby makro zostało poprawnie powtórzone. Spróbuj przesunąć kursor do przodu w linii i pisać .- zobaczysz, że tylko się powtarza D.
— tommcdo

20

cc <Esc>zrobi, jak prosisz, ale jest więcej naciśnięć klawiszy niż 0D. Jeśli chcesz później umieścić coś w tej linii, ccbyć może najlepiej.


2
Jeśli dodasz Shift, będzie to samo i być może łatwiejsze.
— Holloway,

4
Chociaż nie jest to „najczystsze” rozwiązanie, ma jedną zaletę: jest to dokładnie jedna akcja, a więc można ją powtarzać za pomocą .polecenia. Natomiast 0D(jak sugeruje wybrana odpowiedź) są dwie akcje: 0ruch i Dpolecenie.
— tommcdo

@Trengot jest prawdopodobnie łatwiejsze niż 0Ddla mnie, ponieważ mam jkmapowane <Esc>w moim vimrc, więc moje ręce nawet nie musiałyby wychodzić z rzędu.
— EvergreenTree

1
Zobacz odpowiedź @Nobilis: Sjest udokumentowane jako „Synonim dla cc”
— Volker Siegel,

14

Sa następnie Ctrl+Club Escwydaje się spełniać dokładnie tę samą funkcję.

Można to następnie powtórzyć, .ponieważ stanowi pojedyncze działanie.


2
Właśnie myślałem o dodaniu tego jako odpowiedzi, a potem zobaczyłem twój
— zadzwoniłem

7

0Djest prawdopodobnie tym, czego chcesz. Usunie się z kursora na koniec linii, pozostawiając linię (i wszelkie znaki przed kursorem) na miejscu.


Mimo że ta odpowiedź jest 0D
— almos roczek

4

Zwykle używam ddO. ddaby usunąć bieżącą linię i O(to duże o), aby dodać nową linię.

Są to również 3 naciśnięcia klawiszy, ale ddliczą się tylko jako 1 i pół, i uważam, że Ołatwiej jest pisać niż $.

Różni się od 0Drozwiązania tym, że wykonuje automatyczne wcięcie, na przykład z tym kodem (gdzie !···jest tabulator i █ kursor:

def asd():
!···if foo:
!···!···foo()█
!···!···foobar()

0D zostawi cię z:

def asd():
!···if foo:
█
!···!···foobar()

I ddOzostawi cię z:

def asd():
!···if foo:
!···!···█
!···!···foobar()

A jeśli naciśniesz <Esc>natychmiast po tym, Vim powinien usunąć automatyczne wcięcie, więc masz to samo co z 0D.

Nie ma „poprawnego” sposobu, zależy to od tego, co dokładnie chcesz zrobić. Wolę, ddOponieważ jest bardziej elastyczny i ponieważ jest „w moich palcach” :-)


2
^Dpozostawi białe znaki w spokoju.
— EvergreenTree

Ponieważ Opozostawia cię w trybie wstawiania, jest to równoważne cc, z wyjątkiem bez automatycznego wcięcia .... chyba że twoja linia była już automatycznie wcięta.
— Kyle Strand

Będzie to zachowywać się inaczej w ostatnim wierszu pliku.
— tommcdo

0

I aby zapisać ten jeden cenny klawisz, którego możesz użyć, 0Cktóry usunie wszystkie znaki w bieżącym wierszu i przejdzie w tryb wstawiania.

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.