W vimie często muszę usuwać lub szarpać / umieszczać duże bloki tekstu.
Mogę policzyć wiersze tekstu i wprowadzić coś takiego, jak 50dd
usunąć 50 wierszy.
Ale to trochę boli. Jak mogę usunąć ten duży blok tekstu, nie wiedząc wcześniej, ile wierszy usunąć?
move
do końca. Usunięcie do końca nie różni się niczym od przejścia do końca.Odpowiedzi:
Przejdź do linii początkowej bloku i wpisz ma(oznacz „a”, chociaż możesz oczywiście użyć różnych liter, a nawet wielu liter dla różnych znaków, pod warunkiem, że możesz zachować to prosto w głowie, co oznacza każda litera) .
Następnie przejdź do ostatniego wiersza i wprowadź d'a(usuń, aby zaznaczyć „a”) lub y'a(szarpnij, aby zaznaczyć „a”) (a) .
Spowoduje to usunięcie / szarpnięcie wszystkich linii od bieżącego do zaznaczonego (włącznie).
Następnie możesz wkleić go w innym miejscu za pomocą zwykłych poleceń wklejania, takich jak plub P.
Jest również kompatybilny z,
vi
a takżevim
, przy okazji, że twoje środowisko nie jest błogosławione tym drugim.(a) Używam tego również, aby zapisać swoje miejsce w pliku, jeśli muszę szukać gdzie indziej czegoś takiego, jak na przykład kopiowanie i wklejanie definicji funkcji, którą chcę wywołać.
Po prostu zaznaczam bieżącą linię w ten sam sposób ma, a następnie odchodzę, by znaleźć to, czego szukasz.
Następnie, gdy go znajdę i skopiuję do rejestru, po prostu wchodzę, 'aaby wrócić i zaznaczyć „a”, linię, którą wcześniej zapisałem, i gdzie mogę ją wkleić.
źródło
v
klawisz, zadaję sobie pytanie, czy naprawdę go potrzebuję, czy jest lepszy sposób na ruch?W Vimie użyj trybu linii wizualnej :
W przypadku usuwania dużych bloków tekstu jest to preferowane w porównaniu z prostym trybem wizualnym, ponieważ nie trzeba się martwić, w której kolumnie znajduje się kursor.
źródło
}
aby zaznaczyć cały akapit lub)
zdania. Więcej można przeczytać o nich w:h object-motions
/something<CR>
jest bardzo skuteczną metodą dotarcia do końca bloku wyboruj
aby przesunąć kursor w dół (krok 3), możesz wpisać numer linii, a następnieG
wybrać, aż do tej linii. Przykład:V150Gd
Możesz
:set relativenumber
, więc nie musisz liczyć. ;)źródło
:set number
, a następnie użyj d35G, aby usunąć do wiersza 35.relativenumber
, ale lepsza :-)Możesz łatwo usunąć duży blok tekstu, znając jego strukturę.
Jeśli jest to akapit, użyj: d{(np. Możesz poprzedzić go liczbą)
Jeśli jest to blok kodu w nawiasie, użyj: d%
Jeśli tekst pojawia się do końca pliku, użyj: dG
Jeśli wiesz, jak to się kończy, użyj: d/i wpisz tekst kończący, a następnie Enter(możesz także użyć wyrażenia regularnego, więc możliwości są nieograniczone).
Alternatywnie użyj trybu wizualnego ( V) i użyj klawiszy ruchu, aby szybko zaznaczyć tekst (np. Przez {) i usunąć go ( d).
Lub, jak sugeruje Lie Ryan, użyj,
d/search-string/e
aby usunąć tekst z bieżącego kursora do wyszukiwanego ciągu.Zobacz:
:help d
i:help motion
więcej informacji.źródło
d/search-string/e
usunięcie z bieżącego kursora do końca ciągu wyszukiwania, w tym samego łańcucha wyszukiwania, ic/search-query
przejście do trybu wstawiania po usunięciu. Używanied/
zset incsearch
jest zgrabną kombinacją, ponieważ pozwala interaktywnie dowiedzieć się, czy operujesz na odpowiednim zakresie tekstu, i pomaga Ci wiedzieć, kiedy przestać pisać zapytanie, aby uniknąć pisania więcej niż to konieczne.d
za
(zewnętrznym) lubi
(wewnętrznym) i specyfikatorem obiektu. Przedmioty takie jakw
w słowo,p
dla ustępu,(
albob
za(...)
,[
za[...]
,{
lubB
za{...}
itp dokumentacji wizualno-operatorów .Możesz używać ruchów i / lub obiektów tekstowych. Na przykład możesz usunąć wszystko od kursora do następnego pustego wiersza za pomocą
d}
. Jeśli kursor znajduje się w akapicie, akapit można usunąć za pomocądip
lubdap
. Jeśli kursor znajduje się w znaczniku HTML, możesz go usunąć za pomocądit
lubdat
.Dobre mnemoniki dla nich są „ d suĹ i nside” i „ d suĹ się rundę” (pkt / tag / nawias).
źródło
Zwyklę robię
co spowoduje usunięcie każdej linii między podanymi numerami linii początkowej i końcowej (w tym podanymi liniami).
Należy zauważyć, że zarówno
start
iend
może być bezwzględne numery linii, wzorów lub przesunięcia z innej pozycji.Zobacz także komentarz doubleDown na temat przeglądania dokumentacji zakresu Vima , zawiera kilka przydatnych wskazówek.
Przykład:
Powiedz, że masz następujący plik:
Następnie za pomocą polecenia
:2,3d
lub:/fox/,/over/d
lub:/quick/+1,/lazy/-1
lub:+1,+2d
jeśli jesteś na pierwszej linii lub:-1,.d
jeśli jesteś w trzeciej linii, możesz skończyć z:źródło
:set ruler
, a następnie przejdź do górnej i dolnej części tekstu, aby znaleźćstart
iend
numery wierszy, a następnie zrób:<start>,<end>d
:+12,+24d
<start>
i<end>
za to. W celach informacyjnych patrz:h [range]
. Jest więc w rzeczywistości nieco bardziej elastyczny niż się wydaje.Jeśli masz do czynienia z blokami rozdzielonymi (np. Kodem lub znacznikami XML / HTML), możesz ustawić kursor na początku bloku i użyć trybu wizualnego,
%
aby szybko wybrać całe bloki kodu, a następnie nacisnąćd
aby je usunąć.źródło
dap
do usunięcia paragrafu,da(
,da{
,da[
, aby usunąć bloki delimeted nawiasy, szelki lub nawiasach kwadratowych. Dla html istniejedat
, który usuwa znacznikda'
ida"
usuwa ciągi. Istnieje równieżdip
,di(
itp warianty, które usunie wszystko wewnątrz ograniczników, ale pozostawić ograniczniki nienaruszone. Alternatywnie możesz użyćvap
(respvip
), aby zaznaczyć cały akapit (odpowiednio wewnętrzny). (I tak jestva(
ivi(
.) Dalej jestcap
icip
(lubca(
ici(
), aby usunąć i przejść do trybu wstawiania (tj. „Zmień”). Iyap
szarpaćOprócz wszystkich innych dobrych rad dodaję d+ Shift+ Ldo usuwania wszystkiego od bieżącej pozycji kursora do ostatniej widocznej linii na ekranie. Powtórzenie polecenia spowoduje stosunkowo szybkie zejście na dół.
źródło
Numbers.vim Wtyczka jest bardzo przydatna dla. Jest to ulepszony sposób poprzedzania każdej linii numerem linii. Podobnie jak
'number'
i'relativenumber'
obie role w jednym!Jest on domyślnie włączony po instalacji, chcesz również dodać
set number
do vimrc, jeśli jeszcze go nie masz, ponieważ zachowuje się w dziwny sposób, jeśli go nie masz.W trybie normalnym wygląda podobnie do
:set relativenumber
:Pokazuje względne numery linii, z wyjątkiem linii, na której znajduje się kursor, gdzie pokazuje bezwzględną liczbę linii (w tym przypadku 7).
Jeśli następnie przejdziemy do trybu wstawiania , będzie on
number
działał tak, jakby był ustawiony, zawsze pokazując bezwzględne numery linii:Jest jeszcze kilka opcji i kilka poleceń (sprawdź stronę główną), ale domyślne ustawienia powinny działać u większości osób.
źródło
set number
,set relativenumber
wtedyautocmd InsertEnter * :set norelativenumber
iautocmd InsertLeave * :set relativenumber
Inne podejście polega na tym, że jeśli próbujesz usunąć określony wzorzec, możesz po prostu wpisać d/
delim
Enter.źródło
Możesz użyć normalnej procedury wprowadzania dplus ruch (jak już wyjaśniono w innych odpowiedziach). Wtyczka EasyMotion zapewnia nowe ruchy, których możesz użyć, które mogłyby rozwiązać problem w szybki i łatwy sposób.
Powiedzmy, że chcesz usunąć z bieżącej pozycji kursora do końca dowolnego słowa na ekranie, klawisze ruchu byłyby
<Leader>
<Leader>
e(podobnie jake
ruch normalny ). Następnie wpisz wyróżnione litery, które pojawiają się na końcu danego słowa. Istnieje również ruch linii, dzięki czemu można usunąć bieżącą linię do danej linii za pomocą<Leader>
<Leader>
j.Mam
<Leader>
ustawiony klucz na ,. Zatem pełne polecenie to d<Leader>
<Leader>
e{podświetlona litera (litery)}.Od
:help easymotion
:Edytować:
Repozytorium github EasyMotion znajduje się na stronie https://github.com/Lokaltog/vim-easymotion .
Ten reddit o ludziach korzystających z easymotion może być zabawną lekturą.
źródło
Istnieje proste rozwiązanie, które może rozwiązać Twój problem.
Umieść kursor na początku bloku tekstowego, który chcesz usunąć, i zrób to
d50gg
.Spowoduje to usunięcie wszystkich linii z aktualnej pozycji do 50 linii tekstu.
eq: jeśli twój kursor znajduje się w linii 46 ,
d50gg
usunie 4 linie.źródło
G
zamiast gg, ponieważ działa również w vi, i oczywiście:set number
zawsze jest przydatne do znalezienia numeru linii, do której chcesz przejść.Użyj trybu wizualnego z podświetlaniem linii.
Wolę tę metodę do usuwania bloków kodu, ponieważ usuwa ona całe linie w porównaniu do zwykłego trybu wizualnego, w którym musisz ustawić kursor w prawej kolumnie, aby usunąć to, co chcesz.
źródło
Nie lubię mieć
relativenumber
włączonego przez cały czas, więc skonfigurowałem Vima, aby włączał go tylko w trybie wizualnym:Ułatwia to zadanie:
ponieważ po trafieniu Vmożesz zobaczyć, jak daleko jest linia docelowa.
Na dłuższą metę może to być denerwujące (tekst przesuwa się w prawo i lewo, gdy relatywna liczba jest włączona / wyłączona), ale jak dotąd bardzo mi się to podoba.
źródło
v<Esc>d50j
?V
czy wiem, że będę wykonywał operacje liniowe, a potem mogę zostawić tod
do końca, dla większej pewności.Co mi pasowało
vi
::set number
aby wyświetlić numer linii do miejsca, w którym chciałem usunąć;Wróć do linii, od której musiało się rozpocząć usuwanie
d1290G
źródło