Zamień wartości „prawda” i „fałsz” za pomocą ctrl + a, ctrl + x

10

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?

Aleksander Myszow
źródło

Odpowiedzi:

6

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 <-> false
  • yes <-> no
  • on <-> off
  • 0 <-> 1
Sagar Rakshe
źródło
Och, właśnie tego szukałem. Ale mam mały problem. Czy możesz to naprawić? github.com/sagarrakshe/toggle-bool/issues/1
Alexander Myshov
1
Poprawiono @lucidbrot
Sagar Rakshe
12

Istnieje 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.

VanLaser
źródło
Nie ma za co! Mam szalony pomysł na wtyczkę „vim-dwim”, która działa inaczej w zależności od składni pod kursorem (np. Po naciśnięciu Enter), i myślę, że mocno zainspiruję się tą wtyczką. To znaczy, jeśli kiedykolwiek zacznę to robić.
VanLaser,
7

Mnóstwo wtyczek

Przełączanie true/ falsei podobne zostało zaimplementowane przez wielu autorów wtyczek. Dwa z nich zostały już wspomniane:

  • switch.vim autor: Andrew Radev ( # 4172 , github ) i
  • toggle-bool autor: Sagar Rakshe ( github ).

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 ).

Ładowanie wtyczek Ctrl-A/X

Jednak 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.

Fallback

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ć.

Hotschke
źródło
1

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

Efi
źródło
1
Witamy na tej stronie! Zauważ, że byłoby interesujące dodanie warunku, który uczyniłby funkcję taką jak wbudowaną, <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.
statox