Czy istnieje sposób na zwiększenie / zmniejszenie pierwszej cyfry za / pod kursorem, a nie całej liczby.
Wiem, że to nie tak działa vim, ale czy istnieje wtyczka, która to robi? Nie mogłem tego znaleźć.
Jest to bardzo przydatne podczas edycji css, a także w innych przypadkach.
Dany:
▐margin: 10px
Kiedy naciskam CTRL-A
, chcę zobaczyć:
▐margin: 20px
Rzeczywisty:
▐margin: 11px
key-bindings
arithmetic
firedev
źródło
źródło
10<C-a>
dodać 10 lubr2
zamienić 1 na 2.Odpowiedzi:
Wydaje się, że działa to całkiem dobrze i robi całkiem rozsądne rzeczy, gdy używa się
<C-a>
na 9 (95 staje się 105), lub używa<C-x>
na 0 (105 staje się 95):search()
ma tę zaletę, że nie resetuje się@/
.a <Esc>h
- Przejdź do trybu wstawiania, dodaj spację po cyfrze i idź w lewo, aby kursor znajdował się nad cyfrą.<C-a>
lub<C-x>
.lxh
do usuwania dodanego miejsca.Odwzorowałem to na
g<C-a>
ig<C-x>
, więc nadal możesz zadzwonić do oryginału.Nieco inna wersja, która będzie wyszukiwać tylko liczby w bieżącym wierszu (ale pozostawi wiszącą spację, jeśli w bieżącym wierszu nie ma numeru):
A oto kolejna wersja, która wykorzystuje tę samą koncepcję jak poprzednio, ale dodaje również spację przed cyfrą. Spowoduje to
g<C-a>
zignorowanie dowolnego znaku munis przed liczbą (domyślnie,<C-a>
on-42
„zwiększy” ją do-41
.Akceptuje również liczenie, więc
5g<C-a>
zwiększy liczbę o 5:źródło
Przyrost podstawowy
Oto proste makro do wykonania akcji:
W trybie normalnym ty
m`
Zaznacz swoją lokalizacjęl
przesuń jedną postać w prawov$x
przeciąć do końca liniih
wróć do pierwotnej pozycji<c-a>
przyrost (lub spadek)p
wklej z powrotem swoje cięcie``
wróć do swojego znakuPrzejdź do następnego numeru
Jeśli chcesz przeskoczyć do następnej liczby (lub pozostać w bieżącej pozycji, jeśli znajduje się na numerze), potrzebujesz funkcji, która sprawdza bieżący kursor i możliwy skok do następnej liczby.
NextNum
umieszcza znak pod kursorem, sprawdza, czy jest to liczba, a jeśli nie, szuka następnego numeru. Potem reszta jest taka sama. Jeśli chcesz, aby mapowanie było inne, zmień na przykładnnoremap <leader>a
to, co chcesznnoremap <c-a>
.Ignorowanie negatywów i liczb wyższych niż 9
Jeśli chcesz po prostu przewijać cyfry i nie powodować, by działały one jako liczby całkowite ze znakiem, następujące funkcje będą zwiększać i zmniejszać oraz przesuwać po wartościach 0 i 9.
Teraz, gdy jesteś włączony
8
i pisz<leader>a
, dostajesz9
. Ponowne wykonanie spowoduje0
. Jeśli naciśniesz<leader>x
na0
dostajesz9
. To samo dotyczy liczb ujemnych. Funkcje wycinają pojedynczy znak, zwiększają, zmniejszają lub przewijają, a następnie wklejają na miejscu.źródło
<c-a>/<c-x>
również odwzorować na .<c-a>
i<c-x>
na coś innego, ponieważ domyślne zachowanie nie jest przydatna.<c-a>
i<c-x>
dużo. Za każdym razem, gdy aktualizuję wersję lub zwiększam zmienną zakresu, po prostu[N]<c-a>
zamiast kasować i zamieniać.<c-a>
i<c-x>
które musiałyby zostać usunięte za pomocą funkcji, która robi to samo, ale ignoruje kreskę.Oto wersja, którą napisałem, używając wyrażenia zastępczego:
Każdy z nich po prostu szuka pierwszej cyfry w wierszu i dodaje lub odejmuje jeden, jeśli jest w zakresie odpowiednio [0–8] lub [1-9]. Ma trzy problemy:
"/
a jeśli masz włączone wyszukiwanie, wówczas wszystkie liczby w bieżącym buforze zostaną podświetlone, gdy go użyjesz. Możesz dołączyć:noh<CR>
do każdego z powyższychmap
poleceń, aby zatrzymać podświetlanie, ale nie wiem, jak ładnie zatrzymać rejestr przed zablokowaniem.Ponadto, gdybym to był ja, zamapowałbym powyższe na
<leader>a
i<leader>x
zamiast naCTRL-A/X
. W ten sposób masz do dyspozycji oba zachowania.<leader>
jest domyślnie klawiszem ukośnika odwrotnego (\
).źródło
:noh
. Ale prawdziwym problemem jest to, że nie można użyć pozycji kursora jako podstawy, a zatem można zwiększyć tylko pierwszą cyfrę w linii.noremap
) i nigdymap
. Zobacz tę stronę, aby uzyskać bardziej szczegółowe wyjaśnienie tego.