Scambia i valori "vero" e "falso" tramite ctrl + a, ctrl + x


10

Penso che sarebbe utile avere la possibilità di scambiare truee falsevalori nel codice rapidamente, con la combinazione ctrl+ ao ctrl+ x. C'è qualche plugin per questo o qualcos'altro?

Risposte:



12

C'è switch.vim ed è personalizzabile.

Il punto di ingresso principale del plugin è un singolo comando, :Switch. Quando viene eseguito il comando, il plug-in cerca uno dei pochi pattern specifici sotto il cursore ed esegue una sottostazione in base al modello.

Ad esempio se il cursore si trova sul truenel seguente codice:

flag = true

poi dopo l'esecuzione :Switch, truesi trasformerà in false.


Prego! Ho questa folle idea di un plug-in 'vim-dwim' che agisce in modo diverso in base alla sintassi sotto il cursore (ad esempio quando si preme Invio), e penso che mi ispirerò fortemente da questo plug-in. Se mai dovessi iniziare a farlo, questo è.
VanLaser,

7

Plethora di plugin

Commutazione true/ falsee simili è stata implementata da molti autori di plugin. Due di questi sono già stati menzionati:

  • switch.vim di Andrew Radev ( # 4172 , github ) e
  • toggle-bool di Sagar Rakshe ( github ).

Altri sono a levetta da Timo Teifel ( # 895 ), lunedi da Stefan Karlsson ( # 1046 ), toggle_words da Vincent Wang ( # 1676 ), toggle_word da Alexandru Ungur ( # 1748 ), incbool.vim da Dmitry Petrov ( # 4361 , GitHub ) , nextval di Michael Arlt ( # 4536 , github ).

Nel caso in cui desideri aumentare i numeri in base a una serie personalizzata, ad esempio la serie Fibonacci, dai un'occhiata a Nexus di Barry Arthur ( github ).

Plugin Supercharging Ctrl-A/X

Tuttavia, non tutti seguono per impostazione predefinita l'idea di estendere Ctrl-A/Xma definiscono un nuovo comando e / o una nuova mappatura (incl. Switch.vim e toggle-bool ). Voglio evidenziare quei plug-in che "ricaricano" Ctrl-A/Ximmediatamente e quindi forniscono di default ciò che l'OP ha chiesto:

Un plugin correlato che si estende anche Ctrl-A/Xsta accelerando la data di Tim Pope ( # 2120 , github ) che consente di aumentare le date.

Ricaderci

Alcuni plug-in consentono di combinare un secondo Ctrl-A/Xplug-in incrementatore come fallback, ad es

  • SwapIt di Michael Brown:

    nmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    nmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    vmap <Plug>SwapItFallbackIncrement <Plug>SpeedDatingUp
    vmap <Plug>SwapItFallbackDecrement <Plug>SpeedDatingDown
    
  • ciclo di bootleq:

    map <silent> <Plug>CycleFallbackNext <Plug>SpeedDatingUp
    map <silent> <Plug>CycleFallbackPrev <Plug>SpeedDatingDown
    
  • switch.vim di 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>
    

Nota
Se si utilizza il comportamento di ricerca dell'integrato Ctrl-A/X(trovare il prossimo valore possibile in linea per incrementare), il loro sovraccarico può interferire.


1

cambiare la mappatura su ciò che si desidera utilizzare

l'annullamento è nel caso in cui lo usi sopra uno spazio, dal momento che ciw modificherà lo spazio anziché la parola (e non esiste un modo semplice per ottenere la parola giusta in modo affidabile)

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

nota anche che ^ M deve essere <C-V><Enter>, non letteralmente ^ M


1
Benvenuti in questo sito! Si noti che sarebbe interessante aggiungere una condizione che renderebbe la funzione come quella incorporata <C-a>e <C-x>quando la parola corrente non è un valore booleano, in questo modo OP sarebbe davvero in grado di utilizzare questi mapping. Inoltre puoi usare <CR>invece che ^Mnella tua mappatura, ed è di solito una buona pratica fornire una modalità al tuo mapcomando, qui nnoremapsarebbe più appropriato di noremap.
statox
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.