Korzystam z przykładu kodu javascript:
1 var a = 1;
2 var b = |{};
Kursor znajduje się w pozycji |
(na znaku „{”, gdy kształt kursora jest blokowy), dowiaduję się, że chcę, a
aby obiekt został przypisany, więc chcę go zmodyfikować jak poniżej:
1 var a = {};
Chcę więc wiedzieć, kiedy kursor znajduje się na „{”, jak szybko usunąć całą zawartość przed „{”, aż będzie pusty po znaku „=” w wierszu 1?
W innych normalnych edytorach po prostu naciskam klawisz Backspace, aby usunąć kod. Ale nie wiem, jak to osiągnąć w vimie.
insert-mode
normal-mode
Aaron Shen
źródło
źródło
i
i użyć klawisza Backspace. Żadne ciało cię do tego nie zastrzeli. Myślę.eol
następnie Backspace będzie usuwać podziały wiersza. Będziesz także musiałstart
zostać uwzględniony w ustawieniu. (Patrz:help backspace
). Nie używaj tej metody! Istnieje kilka znacznie szybszych metod opisanych szczegółowo w odpowiedziach poniżej.Odpowiedzi:
Nie jestem pewien, czy całkowicie rozumiem pytanie, ale jeśli chcesz usunąć, dopóki nie masz
var a = {};
, możesz z pozycji kursora użyćd?1Enterdwykonuje ruch i można nadać mu wzorzec wyszukiwania dla wyszukiwania /do przodu lub wyszukiwania ?do tyłu.
Oto mały gif, który to pokazuje:
źródło
Enter
pisać po wpisaniud?1
.Jeśli używasz vima (a nie klasycznego vi), to w twoim przykładzie możesz zrobić
vkd
(lubvkx
).v
przełączy go w tryb „wizualny” (wybierz)k
przejdzie w górę o jeden wiersz, aby umieścić kursor na „1”, wybierając część, którą chcesz usunąćd
lubx
usunie zaznaczenieźródło
Usuń w górę
W tym konkretnym przykładzie
dgk
jest to jeden z najszybszych sposobów, aby to zrobić.Po
d
poleceniu, jak wyjaśnił Akshay , może następować ruch, usuwając wszystkie znaki między początkiem kursora a kierunkiem ruchu.W swoim kodzie chcesz usunąć wszystko między pozycją kursora a tą samą kolumną o jeden rząd dalej, więc przesunięcie kursora w górę
gk
ruchem (który w przypadku użycia z operatorem nie jest liniowy) osiągnie twój cel.EDYCJA: BobH wskazuje w komentarzach, że ta metoda działa tylko wtedy, gdy
'wrap'
jest ustawiona. Jako taki, chyba że zawsze masz ustawiony pakiet zawijania, prawdopodobnie lepiej jest użyćdvk
lubvkd
, jak sugerują inne odpowiedzi na tej stronie.Usuń słowa wstecz
Możesz także użyć:
d5b
lubd4B
, który usunie odpowiednio 5 słów lub 4 SŁOWA do tyłu. (1;
to jedno SŁOWO, ale dwa zwykłe słowa).źródło
vim -u NONE -U NONE
i usuwa obie linie.gk
tak, jak wymaga tego pozornie:set wrap
(nieco tajemniczo). Nie mogłem zrozumieć, dlaczego to pozornie działało dla wszystkich innych, ale nie dla mnie, skoro pomocgk
również wydawała się sugerować, że powinna działać. Jedyną wskazówką było to, że główne znaczeniegk
miało związek z owiniętymi liniami. Kiedyś próbowałem ustawić wrap na (coś w rodzaju kaprysu), voila, zadziałało.Nie mogę jeszcze komentować, więc muszę udzielić nowej odpowiedzi. Klucze d kpodane przez Richa nie działają dla mnie, nawet gdy korzystam z opcji nocompatible. Przyczyną może być to, że kvim uważa ruch za liniowo, w którym to przypadku obie linie są usuwane. Od
:help d
:Pokazuje także rozwiązanie: użyj, dvkaby wymusić ruch zgodny z charakterem. To załatwia sprawę.
Nie znałem wcześniej, więc oto
:help o_v
:źródło