Myślę, że przydałaby się możliwość szybkiej zamiany truei falsewartości w kodzie za pomocą kombinacji ctrl+ alub ctrl+ x. Czy jest jakiś plugin do tego czy coś innego?
Myślę, że przydałaby się możliwość szybkiej zamiany truei falsewartości w kodzie za pomocą kombinacji ctrl+ alub ctrl+ x. Czy jest jakiś plugin do tego czy coś innego?
Odpowiedzi:
Napisałem wtyczkę ( toggle-bool ) do przełączania wartości boolowskich, które możesz wypróbować. Obsługuje następujące wartości logiczne:
true <-> falseyes <-> noon <-> off0 <-> 1Istnieje switch.vim i można go dostosowywać.
Głównym punktem wejścia wtyczki jest pojedynczym polecenia
:Switch. Po wykonaniu polecenia wtyczka szuka jednego z kilku określonych wzorców pod kursorem i wykonuje podstacje w zależności od wzorca.
Na przykład, jeśli kursor znajduje się truew następującym kodzie:
flag = true
Następnie po wykonaniu :SwitchThe truezamieni false.
Przełączanie true/ falsei podobne zostało zaimplementowane przez wielu autorów wtyczek. Dwa z nich zostały już wspomniane:
Inne są przełączane przez Timo Teifela ( # 895 ), poniedziałek przez Stefana Karlssona ( # 1046 ), przełączane słowa Vincenta Wanga ( # 1676 ), przełączane słowo Alexandru Ungura ( # 1748 ), incbool.vim autorstwa Dmitrija Petrowa ( # 4361 , github ) , nextval autor: Michael Arlt ( # 4536 , github ).
Na wypadek, gdybyś chciał zwiększyć liczbę według niestandardowej serii, np. Serii Fibonacciego, sprawdź nexus Barry'ego Arthura ( github ).
Ctrl-A/XJednak nie wszystkie z nich domyślnie podążają za pomysłem rozszerzenia, Ctrl-A/Xale definiują nowe polecenie i / lub nowe mapowanie (w tym switch.vim i toggle-bool ). Chcę wyróżnić te wtyczki, które „ładują” po Ctrl-A/Xwyjęciu z pudełka, a zatem domyślnie zapewniają to, o co OP poprosił:
Powiązaną wtyczką, która również się rozszerza, Ctrl-A/Xjest Speeddating autorstwa Tima Pope'a ( # 2120 , github ), który pozwala zwiększać daty.
Niektóre wtyczki pozwalają łączyć drugą Ctrl-A/Xwtyczkę inkrementatora jako rezerwową, np
Zamień autor: Michael Brown:
nmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
nmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
vmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
vmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
cykl przez bootleq:
map <silent> <Plug>CycleFallbackNext <Plug>SpeedDatingUp
map <silent> <Plug>CycleFallbackPrev <Plug>SpeedDatingDown
switch.vim autor: Andrew Radev:
nnoremap <c-a> :if !switch#Switch()<bar>call speeddating#increment()<bar>endif<cr>
nnoremap <c-x> :if !switch#Switch({'reverse': 1})<bar>call speeddating#decrement()<bar>endif<cr>
Uwaga:
Jeśli użyjesz funkcji wyszukiwania wbudowanego Ctrl-A/X(znajdź następną możliwą wartość w linii do przyrostu), doładowanie ich może przeszkadzać.
zmień mapowanie na to, czego chcesz użyć
Cofnij, jeśli użyjesz go na spacji, ponieważ ciw będzie edytować spację zamiast słowa (i nie ma łatwego sposobu na niezawodne przejście do właściwego słowa)
function SwapBool ()
let s:w = expand("<cword>")
if s:w == "false"
normal ciwtrue
if expand("<cword>") != "true"
normal u
endif
elseif s:w == "true"
normal ciwfalse
if expand("<cword>") != "false"
normal u
endif
endif
endfunction
noremap <C-F> :call SwapBool()^M
zauważ także, że ^ M musi być <C-V><Enter>, a nie dosłownie ^ M
<C-a>a <C-x>gdy bieżące słowo nie jest wartością logiczną, w ten sposób OP mógłby naprawdę korzystać z tych mapowań. Możesz także użyć <CR>zamiast ^Mw mapowaniu, i zwykle najlepszą praktyką jest zapewnienie trybu dla twojego mappolecenia, tutaj nnoremapbyłoby bardziej odpowiednie niż noremap.